北京レース2019

素数

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

//判断质数 
bool isPrime(int x) {
    
    
	if (x < 2) return false;
	
	for (int i = 2; i <= x/i; i ++) {
    
    
		if (x % i == 0) return false;
	}
	
	return true;
}

//求最大公约数 
int gcd(int x, int y) {
    
    
	if (y == 0) return x;
	return gcd(y, x % y);
}

int main() {
    
    
	int m, n, t;
	cin >> m >> n;

	if (gcd(m,n) == 1) {
    
    
		t = m + n;
		cout << t << endl;
		if (isPrime(t)) cout << "YES";
		else cout << "NO";
	}
	else {
    
    
		//长整形转换 
		cout << (long long) m * n << endl;
		cout << "NO";
	}
	
	return 0;
}

卓球

#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    
    
	char ch;
	
	int a = 0, b = 0;
	//连续输入字符的方法 
	while (cin >> ch) {
    
    
		//比赛结束 
		if (ch == 'E') break;
		
		//樊振东得分 
		if (ch == 'F') {
    
    
			a ++;
			if (a == 11 && b < 10 || a > 11 && a - b == 2) {
    
    
				printf("%d:%d\n", a, b);
				a = 0;
				b = 0;
			}
		}
		//对手得分 
		else if (ch == 'A') {
    
    
			b ++;
			if (b == 11 && a < 10 || b > 11 && b - a == 2) {
    
    
				printf("%d:%d\n", a, b);
				a = 0;
				b = 0;
			}
		}
	}
	
	//最后一局虽然没比完,也要输出得分 
	if (a != 0 || b != 0) {
    
    
		printf("%d:%d\n", a, b);
	}
	
	return 0;
}

乗算

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

const int MOD = 10007;
int a[105], pos;

void add() {
    
    
	//t表示进位 
	int t = 1;
	
	//最高位上有可能进位,所以往前扩展一位 
	for (int i = pos; i >= 0; i --) {
    
    
		t += a[i];
		a[i] = t % 10;
		t /= 10;
	}
}

int main() {
    
    
	char ch;
	
	while (cin >> ch) {
    
    
		//将数字存入数组 
		if (ch != '.') {
    
    
			a[++pos] = ch - '0';
		}
		//如果是小数点,则读入下一个数字,并四舍五入;停止输入 
		else {
    
    
			cin >> ch;
			if (ch > '4') {
    
    
				add();
			}
			break;
		}
	}
	
	//计算取整后每位数字的乘积,并取模 
	int ans = 1;
	for (int i = 1; i <= pos; i ++) {
    
    
		ans = (ans * a[i]) % MOD;
	}
	
	cout << ans;
	
	return 0;
}

いいね

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    
    
	int m, n, cnt = 0;
	cin >> m >> n;
	
	int x;
	for (int i = 1; i <= n; i ++) {
    
    
		cin >> x;
		if (x < m) cnt ++;
	}
	
	cout << cnt;

	return 0;
}

回文

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    
    
	int k, a[30] = {
    
    0, 0};
	cin >> k;
	
	for (int i = 2; i <= k; i ++) {
    
    
		for (int j = 1; 2*j<=i; j ++) {
    
    
			a[i] = a[i] + a[i-2*j] + 1;
			
		}
	}
	
	cout << a[k];

	return 0;
}

/*
这是一道递归题,从0开始,逐一观察规律 

K:拆分数 	枚举 
0: 0,
1: 0,	
2: 1,		11
3: 1,		111
4: 3,	 	1111, 121, 22
5: 3,		11111, 131, 212
6: 7,		111111, 11211, 1221, 141, 2112, 222, 33

*/

おすすめ

転載: blog.csdn.net/davidliule/article/details/110123334