第18次CCF CSP认证真题解
1、报数
题目链接:https://sim.csp.thusaac.com/contest/18/problem/0
根据题意,全部的测试数据范围满足n <= 666,所以,报出的数是 7 的倍数或含有数字 7的情况有:7的倍数、个位为7、十位为7、百位为7,如14、17、71、77、117、171、177、711等情况。当数字满足上述情况后,只需判断该数是甲乙丙丁中谁跳过的,并做统计即可。
100分代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n;
int count = 0;
cin >> n;
int a = 0,b = 0,c = 0,d = 0;
while(count < n+a+b+c+d){
count++;
if(count % 7 == 0 || count % 10 == 7 || count / 10 == 7 || count % 100 / 10 == 7 || count / 100 == 7){
if(count % 4 == 1){
a++;
}
else if(count % 4 == 2){
b++;
}
else if(count % 4 == 3){
c++;
}
else if(count % 4 == 0){
d++;
}
}
}
cout << a << endl << b << endl << c << endl << d << endl;
return 0;
}
评测结果:
2、回收站选址
题目链接:https://sim.csp.thusaac.com/contest/18/problem/1
本题难度不大,读懂题意后判断每种情况并统计即可。
100分代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n;
cin >> n;
int x[1010],y[1010];
for(int i = 0; i < n; i++){
cin >> x[i] >> y[i];
}
int a = 0,b = 0,c = 0,d = 0,e = 0;
for(int i = 0; i < n; i++){
int count = 0;
for(int j = 0; j < n; j++){
if(i == j){
continue;
}
else if(x[j] == x[i] && y[j] == y[i]-1)count++;
else if(x[j] == x[i] && y[j] == y[i]+1)count++;
else if(x[j] == x[i]-1 && y[j] == y[i])count++;
else if(x[j] == x[i]+1 && y[j] == y[i])count++;
}
if(count == 4){
int score = 0;
for(int k = 0; k < n; k++){
if(i == k){
continue;
}
else if(x[k] == x[i]-1 && y[k] == y[i]-1)score++;
else if(x[k] == x[i]+1 && y[k] == y[i]+1)score++;
else if(x[k] == x[i]+1 && y[k] == y[i]-1)score++;
else if(x[k] == x[i]-1 && y[k] == y[i]+1)score++;
}
if(score == 0)a++;
else if(score == 1)b++;
else if(score == 2)c++;
else if(score == 3)d++;
else if(score == 4)e++;
}
}
cout << a << endl << b << endl << c << endl << d << endl << e << endl;
return 0;
}
评测结果: