1096 大美数1097 矩阵行平移1098 岩洞施工1099 性感素数1100 校庆

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;
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值