题目描述
解题思路
题目比较简单,需要搞清楚两个点:
- 跳过的数是7的倍数或含7的数,即取余为0或各个位上有7的数
- n代表的是总共的报数个数,跳过的数是不算的
下面就只要解决如何判定一个数是否需要跳过的问题了:
对于每个数num:
(1)判断是否是7的倍数:num%7 == 0
(2)判断是否含7:由于n最大可以到666,所以最终num的数字会比较大,所以我们需要用一个循环对每一位上都进行判断。从个位开始,判断是否为7,即 num%10 == 7,若是,对当前num结束判断;若不是,则num = num/10,继续对高一位进行判断,直到最后 num/10 == 0,判断结束。
最后输出的是四个人分别跳过的个数,判断num跳过时相应的计数器做自增即可。
最后贴上满分代码
满分代码
#include<cstdio>
#include<iostream>
using namespace std;
int main() {
int n;
int count[4] = {0}; //甲乙丙丁四人跳过的个数
cin >> n;
int k=0, num=1; //k为总共报了多少个数,num是当前数字
while(k<n) {
int temp = num; //临时变量,用于判断每一位是否为7
int flag = 0; //标记是否跳过当前数
if(temp%7==0) flag = 1; //是否为7的倍数
else{
//从个位开始判断是否为7,不是则除10,继续判断下一位
while(temp%10!=7 && temp/10!=0) {
temp = temp/10;
}
if(temp%10==7) flag = 1;
}
//若跳过当前数,相应人的计数器要加1
if(flag == 1) {
if(num%4==0) count[3]++;
else count[num%4-1]++;
}else k++; //不跳过则总报数个数+1
num++;
}
for(int i=0; i<4; i++) {
cout << count[i] << endl;
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)