1096 大美数
只要找到四个不同的正因数即可 注意要每次遍历下面判断其是不是因数 是因数再进行遍历 减少时间复杂度
""正整数 N 可以整除它的 4 个不同正因数之和"" 这个表示是(a1+a2+a3+a4)%N为0 注意除数是÷号后面的 被除数是÷前面的 x整除y则x是除数即后面按那个数
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, t;
scanf("%d", &n);
getchar();
for (int i = 0; i < n; ++i) {
scanf("%d", &t);
getchar();
bool f = 0;
if (t > 5)
for (int a = 1; a <= t; ++a) {
if (t % a != 0) continue;
for (int b = a + 1; b <= t; ++b) {
if (t % b != 0 || a == b ) continue;
for (int c = b + 1; c <= t; ++c) {
if (t % c != 0 || a == c || b == c ) continue;
for (int d = c + 1; d <= t; ++d) {
if (t % d != 0 || d == a || d == b || d == c) continue;
if ( (a + b + c + d) % t == 0) {
printf("Yes\n");
f = 1;
break;
}
}
if (f) break;
}
if (f) break;
}
if (f) break;
}
if (!f) printf("No\n");
}
return 0;
}
1097 矩阵行平移
两个reverse 这是数组平移题型的固定解法之一
例如序列1 2 3 4 5向右平移两个 可以先全部反转一次变为5 4 3 2 1 然后去掉前两个变为3 2 1再反转一次变为1 2 3 如果不是去掉而是替换同理
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k, x, f = 1;
cin >> n >> k >> x;
int a[n][n], b[n] = {0};
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
cin >> a[i][j];
for (int i = 0; i < n; i += 2) {
reverse(a[i], a[i] + n);
reverse(a[i] + f, a[i] + n);
for (int j = 0; j < f; ++j)
a[i][j] = x;
if (f == k) f = 1;
else f++;
}
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
b[i] += a[j][i];
for (int j = 0; j < n - 1; ++j)
cout << b[j] << " ";
cout << b[n - 1];
return 0;
}
1098 岩洞施工
""岩洞底部的轮廓线不会与顶部轮廓线交叉。""
题目保证不会重叠 所以计算上层最小值 下层最大值 判断下层最大值是不是比上层最小值小1或者小得多于1 如果是则合法 输出min-max 否则输出max-min+1 为什么+1 因为只削去max-min只会让他俩平齐再削去一个才能通过
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, t;
cin >> n;
int min = 1000, max = 0;
for (int i = 0; i < n; ++i) {
cin >> t;
if (t < min) min = t;
}
for (int i = 0; i < n; ++i) {
cin >> t;
if (t > max) max = t;
}
if (min - max >= 1) printf("Yes %d", min - max);
else printf("No %d", max - min + 1);
return 0;
}
1099 性感素数
先判断这个数是不是素数 如果是则判断这个数-6是不是素数如果是则输出 如果不是则判断这个数+6是不是素数如果是则输出 如果都不是则开始找大于这个数的最小性感素数
#include<bits/stdc++.h>
using namespace std;
bool isprime(int a) {
if (a < 2) return false;
for (int i = 2; i * i <= a; ++i)
if (a % i == 0) return false;
return true;
}
int main() {
int n;
cin >> n;
if (isprime(n - 6) && isprime(n)) printf("Yes\n%d", n - 6);
else if (isprime(n + 6) && isprime(n)) printf("Yes\n%d", n + 6);
else {
for (++n;; ++n) {
if (isprime(n)) {
if (isprime(n - 6) || isprime(n + 6)) {
printf("No\n%d", n);
break;
}
}
}
}
return 0;
}
1100 校庆
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, min2 = 99999999, min1 = 99999999, c = 0;
string s, s1, s2;
cin >> n;
unordered_map<string, int> m;
for (int i = 0; i < n; ++i) {
cin >> s;
m[s] = 1;
}
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> s;
if (m[s] == 1) {
if (stoi(s.substr(6, 8)) < min1) {
min1 = stoi(s.substr(6, 8));
s1 = s;
}
++c;
} else if (stoi(s.substr(6, 8)) < min2) {
min2 = stoi(s.substr(6, 8));
s2 = s;
}
}
cout << c << endl << (c > 0 ? s1 : s2);
return 0;
}