csp 2019-12-1 报数
题目:
这个题目我考的时候做法是:
10 11 #include<cstdio> 12 #include<iostream> 13 #include<cstring> 14 using namespace std; 15 int main(){ 16 int n,i=0; 17 scanf("%d",&n); 18 int a=0,b=0,c=0,d=0; 19 for(int i=1;i<=n;i++){ 20 if(i%4==1){ 21 if(i%7==0||i%10==7||i/10%10==7){ 22 a++; 23 n++; 24 } 25 } 26 if(i%4==2){ 27 if(i%7==0||i%10==7||i/10%10==7){ 28 b++; 29 n++ ; 30 } 31 } 32 if(i%4==3){ 33 if(i%7==0||i%10==7||i/10%10==7){ 34 c++; 35 n++; 36 } 37 } 38 if(i%4==0){ 39 if(i%7==0||i%10==7||i/10%10==7){ 40 d++; 41 n++; 42 } 43 } 44 } 45 printf("%d\n%d\n%d\n%d",a,b,c,d); 46 return 0; 47 }
但是只有60分,呜呜呜呜呜呜呜呜
然后发现问题出在,我并没有注意到n=666,我的代码只针对两位数的n,果然考试脑子不清楚~
改进代码如下:
1 #include<iostream> 2 3 #include<cstring> 4 5 using namespace std; 6 7 int a[4]; 8 bool f(int x){ 9 for(;x!=0;x/=10) 10 if(x%10==7) 11 return true; 12 return false; 13 } 14 int main(){ 15 int n; 16 scanf("%d",&n); 17 memset(a,0,sizeof(a)); 18 for(int i=1;n>0;i++) 19 { if(i%7==0||f(i)) 20 a[i%4]++; 21 else 22 n--; 23 } 24 for(int i=1;i<=3;i++) 25 printf("%d\n",a[i]); 26 printf("%d\n",a[0]); 27 return 0; 28 29 }
无聊就学习 反正没事干