其他分享
首页 > 其他分享> > CSP 2019-12 解答

CSP 2019-12 解答

作者:互联网

CSP 2019-12

2019-12-1

//四个人玩报数游戏(跳过7的倍数和含7的数),输出每个人最后在报出n个数游戏结束后跳过多少个数
#include<iostream>
using namespace std;
int n;	//n<=666,n是不包过跳过的数的数,因为不知道最后能报到多大的数,所以不采用暴力的方法
bool test(int i) {
	while (i) {
		if (i % 10 == 7)	//个位为7
			return true;
		else 
			i /= 10;	
	}
	return false;
}
int main() {
	cin >> n;
	int i, count = 0, a = 0, b = 0, c = 0, d = 0;	//计数器,abcd分比为甲乙丙丁四个人跳过的数量
	for (i = 1; count < n; i++) {					//!!注意这里是<不是小于等于,因为count是从零开始
		if (i % 7 == 0 || test(i)) {
			//如果i是7的倍数或者i的十位为7或者i的个位为7
			if ((i - 1) % 4 == 0)
				a++;
			else if ((i - 2) % 4 == 0)
				b++;
			else if ((i - 3) % 4 == 0)
				c++;
			else
				d++;
		}
		else
			count++;
	}
	cout << a << endl << b << endl << c << endl << d << endl;
}

2019-12-2

之前想复杂了,其实暴力求解就可以,对于三个要求写两个函数:一个判断坐标(x,y)是否存在垃圾,一个判断(x,y)上下左右是否存在垃圾。再在主函数中求分数。

#include<iostream>
using namespace std;
int n;	//表示垃圾点个数,n<=10^3,
int pos[5];
struct coordinate {
	int x;
	int y;//坐标数值<=10^9
}node[1001];
bool exit_laji(int x, int y) {
	int i ;
	for (i = 0; i < n; i++) {
		if (node[i].x == x && node[i].y == y)
			return true;
	}
	return false;
}
bool is_huishouzhan(int x, int y) {
	if (exit_laji(x, y) && exit_laji(x - 1, y) && exit_laji(x + 1, y) && exit_laji(x, y - 1) && exit_laji(x, y + 1))
		return true;
	else
		return false;

}
int main() {
	cin >> n;
	int i,count=0;
	for (i = 0; i < n; i++) 
		cin >> node[i].x >> node[i].y;
	for (i = 0; i < n; i++) {
		int x = node[i].x, y = node[i].y;
		count = 0;
		if (is_huishouzhan(x, y)) {
			if (exit_laji(x - 1, y - 1))
				count++;
			if (exit_laji(x - 1, y + 1))
				count++;
			if (exit_laji(x + 1, y - 1))
				count++;
			if (exit_laji(x + 1, y + 1))
				count++;
				pos[count]++;
		}
		
	}
	for (i = 0; i < 5; i++)
		cout << pos[i] << endl;

}

标签:count,node,laji,12,++,int,2019,exit,CSP
来源: https://blog.csdn.net/qq_43725311/article/details/113444991