- lizexuan's blog
EXJ1022 && EXJ1023
- 2023-7-2 10:11:38 @
题目:
题目解析
看注释
代码
#include <bits/stdc++.h>
using namespace std;
bool cmp(string a, string b) {
return a + b > b + a;
} // 求出串联最优解
int main() {
freopen("bignum.in", "r", stdin);
freopen("bignum.out", "w", stdout);
int n;
cin >> n;
vector<string> nums(n); // 所有数字
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end(), cmp); // 排序
string res;
for (auto s : nums) {
res += s;
} //Eazy
cout << res << endl;
return 0;
}
//Code written by Li Zexuan (Looks handsome)
#include<bits/stdc++.h>
using namespace std;
int GetFactorSum(int n) {
int i, sum = 0;
for (i = 2; i <= n / i; i++) {
if (n % i == 0) {
if (i == 1 || i == n / i) {
sum += i;
} else {
sum += i + n / i;
}
}
}
return sum;
} // 求所有因数之和(除去本身)
int main() {
freopen("number.in", "r", stdin);
freopen("number.out", "w", stdout);
int arr[2][10], cnt = -1;
int n;
int i, num;
cin >> n;
for (i = 2; i <= n; i++) {
num = GetFactorSum(i);
if (GetFactorSum(num) == i && (num + i) <= (n * 2)) { //如果为亲密数对
++cnt;
arr[0][cnt] = i, arr[1][cnt] = num;
}
} // 输出所有亲密数对
for (int i = 0; i <= cnt; i++) {
if (i != cnt) {
cout << arr[0][i] << ' ' << arr[1][i] << endl;
} else {
cout << arr[0][i] << ' ' << arr[1][i];
}
}
return 0;
}