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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM