CCF 报数--(代码简单易懂有注释)

    科技2025-10-23  8

    本人老nt了,本想写个第一二题练练手,没想到第一题就给我卡了半天🤮

    #include<iostream> using namespace std; int a[5000]; //开个数组,注意报的数可能超过1000 int main(){ int n; cin>>n; int num = 0; for(int i=1;i<=n;i++){ //这里寻找7的倍数 if(i%7==0 && !a[i]){ a[i] = 1; num++; } else if(i/10%10 == 7 || i%10 == 7) //因为n小于666,所以这一步不考虑700以上的数,考虑个位和十位为7的数 if(!a[i]){ a[i] = 1; num++; } } int temp = n; int skr; //skr 是新增的数 while(1){ skr = 0; for(int i=temp+1;i<=temp+num;i++){ //就这个地方坑了我半天,还是基础没打好啊,一开始竟然认为k/10==7可以判断十位为7,殊不知171/10==17....我吐我自己 if((i%7==0 || i%10==7 || i/10%10 == 7 || i/100%10 ==7 ) && !a[i] ){ a[i] = 1; skr++; } } if(!skr) break; else { temp += num; num = skr; } } n = temp + num; //这个是最终的n,下面就是打印 for(int i=1;i<=4;i++){ int ans = 0; int k = i; while(k<=n){ if(a[k]){ ans++; } k+=4; } if(i!=4) cout<<ans<<endl; else cout<<ans; } }
    Processed: 0.015, SQL: 8