通用解法
#include<iostream>
using namespace std;
inline bool canBreak(int n){
if(n%7==0) return true;
while(n>0){
if(n%10==7) return true;
n/=10;
}
return false;
}
int main(){
int n;
cin>>n,++n;
int counter[4]={0,0,0,0};
int k = 1;
while(k<n){
if(canBreak(k)){
++counter[(k-1)%4];
++n;
}
++k;
}
for(int i=0;i<4;++i){
cout<<counter[i]<<endl;
}
return 0;
}
解法2
#include<iostream>
using namespace std;
int main()
{
int count=1,jia=0,yi=0,bing=0,ding=0;
int num,seven;
cin>>num;
while(count-(jia+yi+bing+ding)<=num)
{
seven=count%7==0 || count%10==7 || count/10%10==7 || count/100==7;
if(seven==1)
{
if(count%4==1)
jia++;
else if (count%4==2)
yi++;
else if (count%4==3)
bing++;
else if (count%4==0)
ding++;
}
count++;
}
cout<<jia<<endl<<yi<<endl<<bing<<endl<<ding<<endl;
return 0;
}