csp 2019-12-1 报数

Posted miao-xixixi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
%d
%d
%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
",a[i]);
26     printf("%d
",a[0]);
27     return 0;
28 
29 }

 

以上是关于csp 2019-12-1 报数的主要内容,如果未能解决你的问题,请参考以下文章

CSP 201912-1 报数 python

CCF-CSP C/C++ 201912-1 报数 题解

CSP核心代码片段记录

CCF CSP 201712-2 游戏

CCF-CSP 201712 赛题训练

[CSP-S模拟测试60]题解