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