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 }

 

posted @ 2020-03-14 23:17  miao-xixixi  阅读(848)  评论(0编辑  收藏  举报