北京市赛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

*/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值