今天重新写了12月份csp测试题中的第一题和第二题,改到全对大概花了三个小时,好久没写代码实在是生疏到可怕!!!!提前确定思路更重要,写代码少走许多弯路。
第一题 报数
1.首先是思路问题,刚开始的思路是不知道n 是多少那么就选择1000,然后再截取,截取的话思考了半天,并没有结果,后来发现了一个思维误区,对于代码
for(i=0;i<100;i++)
判断条件这里不一定要是明确的数字,也可以是其它的内容,例如这道题就是count<n;
这样写的话就解决了总数问题。用if else 就可以解决
2.代码简洁化
使用数组
3.贴代码
#include<iostream>
using namespace std;
int main() {
int n, count=0, a[4] = { 0,0,0,0 }, i;
cin >> n;
for (i = 1;count < n;i++) {
if (i % 7 != 0 && i % 10 != 7 && i / 10 % 10 != 7 && i / 100 != 7)
count++;
else
a[i % 4]++;
}
cout << a[1] << endl << a[2] << endl << a[3] << endl << a[0];
}
第二题 回收站选址
- 使用的是二维数组,
- 查找两次,
- 第二次查找的时候要注意满足条件二,
- 统计分数的时候使用数组最简单
- 查找是一个累加过程,要使用或
- 数据范围问题,使用 long int
- 贴代码
#include<iostream>
using namespace std;
int main() {
int n, i, j, A = 0, B = 0, C = 0, D = 0,t=0,m=0, count[5] = {0,0,0,0,0};
long a[1000][3];
cin >> n;
for (i = 0;i < n;i++) {
cin >> a[i][0] >> a[i][1];
a[i][2] = 0;
}
//第一次查找,寻找满足条件的寻址点
for (i = 0;i < n;i++) {
for (j = 0;j < n;j++) {
if ((a[i][0] == a[j][0] && a[i][1] == a[j][1] - 1) || (a[i][0] == a[j][0] && a[i][1] == a[j][1] + 1)
|| (a[i][0] == a[j][0] - 1 && a[i][1] == a[j][1]) || (a[i][0] == a[j][0] + 1 && a[i][1] == a[j][1]))
a[i][2]++;
}
}
//第二次查找,计算寻址点的分数
for (i = 0;i < n;i++) {
if (a[i][2] == 4) {
m = 0;
for (j = 0;j < n;j++)
if ((a[i][0] == a[j][0] - 1 && a[i][1] == a[j][1] - 1) || (a[i][0] == a[j][0] + 1 && a[i][1] == a[j][1] + 1)
|| (a[i][0] == a[j][0] + 1 && a[i][1] == a[j][1] - 1) || (a[i][0] == a[j][0] - 1 && a[i][1] == a[j][1] + 1))
m++;
count[m]++;
}
}
for(i = 0;i < 5;i++) {
cout << count[i] << endl;
}
}
木心:生活是死前一段过程