【原文出处,可以提交代码打分】http://118.190.20.162/view.page?gpid=T100
感觉题目水平还是挺高的,蛮有意思的一个题,考察综合程度比较好。


解答比较容易想到:
1、先构建一个函数算那个7的条件:模运算、降权取低位看是不是7。
2、然后记录不跳过的次数和给跳过的人记录跳过的次数。
有趣的是这个用for循环做的时候,可以很好的利用结束条件,看代码:
#include<bits/stdc++.h>
using namespace std;
//丁甲乙丙跳过次数
int tg[4]={0};
//数的个数,当前数,一共数了多少个数
int n,cur=1,cnt=1;
bool Seven(int n){
if(n%7==0){ //被7整除
return true;
}
while(n>0){ //带7
if(n%10==7){
return true;
}
n/=10;
}
return false;
}
int main(){
cin>>n;
for(cur=1;cnt<=n;cur++){
if(Seven(cur)){ //跳过
tg[cur%4]++;
}else{
cnt++; //不跳过
}
}
for(int i=1;i<4;i++){
cout<<tg[i]<<endl;
}
cout<<tg[0]<<endl;
return 0;
}
本文探讨了一个有趣的计数问题,即在数数过程中跳过所有包含数字7或能被7整除的数字,并记录跳过次数。通过使用C++实现的算法,展示了如何有效地解决这一问题,同时提供了完整的代码示例。

被折叠的 条评论
为什么被折叠?



