2020.12.14vj补题

A. Lucky Ticket

题意:就是说4与7是幸运数字,用4和7组成的数字也是幸运数字,问所给数字是不是幸运数字

思路:直接敲

代码:

2020.12.14vj补题
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 int main(){
 8     int n;
 9     scanf("%d",&n);
10     int a[150];
11     int sum=0,sum1=0,sum2=0;
12     for(int i=1;i<=n;i++){
13         int num=0;
14         scanf("%1d",&num);
15         if(num==4){
16             sum++;
17             if(i<=n/2){
18                 sum1+=num;
19             }else{
20                 sum2+=num;
21             }
22         }else if(num==7){
23             sum++;
24             if(i<=n/2){
25                 sum1+=num;
26             }else{
27                 sum2+=num;
28             }
29         }
30     }
31     if(sum==n&&sum1==sum2){
32         printf("YES");
33     }else{
34         printf("NO");
35     }
36 }
View Code

B. Lucky Mask

题意:4和7是幸运数字,由4和7组成的数字也是幸运数字,现在有一种新的加密运算,例如给定4567,则其值是47,现在给定a和b,其值是b并且大于a的这个数是多少

思路:反向思维,一个是进行累加运算,一个一个的去对结果,从a开始加一,如果符合就直接输出,二是如果他们得到的加密云算相等就进行输出

wa掉的点:1.总以为是有规律的,其实这样的分类情况有好多,一开始以为只是添加1就行,并不是,77和7这组数就应该输出78;2.不应该从给定的判断条件入手找,应该先从判断是不是大于a开始,也就是说应该调整一下想问题时,判断条件的先后问题

代码:

2020.12.14vj补题
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;//50
 7 int main(){
 8     int a,b;
 9     scanf("%d %d",&a,&b);
10     //int num;
11     int m=0;
12     while(b){
13             if(b%10==4||b%10==7){
14                 m=m*10+b%10;
15             }
16             b/=10;
17     }
18 
19     int s=0;
20     int flag=0;
21     for(int i=a+1;;i++){
22         s=0;
23 
24 
25         int d=i;
26         while(d){
27             if(d%10==4||d%10==7){
28                 s=s*10+d%10;
29             }
30             d/=10;
31         }
32         if(s==m){
33             flag=i;
34             break;
35         }
36     }
37 
38     printf("%d",flag);
39 }
View Code

C. Lucky Conversion

题意:4和7是幸运数字,现在给定两个字符串a和b,可以执行两种操作,1)将里面的4替换为7,将里面的7替换为4;2)交换a字符串中任何一对位置,问从字符串a到字符串b要经过最少多少步

思路:统计a和b中不同的4和7,然后直接输出大的那个

代码:

2020.12.14vj补题
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;//50
 7 const int maxx=1e5+10;
 8 int main(){
 9     char s1[maxx],s2[maxx];
10     scanf("%s",&s1);
11     scanf("%s",&s2);
12     int len1=strlen(s1),len2=strlen(s2);
13     int s=0,q=0;
14     for(int i=0;i<len1;i++){
15         if(s1[i]==s2[i]){
16             continue;
17         }else{
18             if(s1[i]=='4'){
19                 s++;
20             }else if(s1[i]=='7'){
21                 q++;
22             }
23         }
24     }
25     printf("%d",max(q,s));
26 }
View Code

 

D.Lucky Number 2

题意:就是给定了了一串数字,这串数字由4和7组成,并且有a1个4,a2个7,a3个47,a4个74,给定a1--a4,问这串数字最小是多少

思路:读错了题,不知道47必须是紧挨着的,后悔!大致思路就是个找规律,从题目中知道这是仅有4和7,如果你写4747这种夹杂任意4和7的字符串就能知道:当以4开头以4结尾的时候47和74一样多,当以7开头以7结尾的时候74和47一样多,当以4开头以7结尾或者以7开头以4结尾的时候47和74一样多,并且47和74最多只能差1,这样就可以对这些数进行分类:

1.当47的个数>74的个数:一定是44444..474747777保证最小

2.当47的个数<74的个数:一定是7444...474747777保证最小

3.当47的个数=74的个数:一定是4444474747....774保证最小

代码:

2020.12.14vj补题
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;//50
 7 int main(){
 8     int a1,a2,a3,a4;
 9     scanf("%d %d %d %d",&a1,&a2,&a3,&a4);//a3--47
10     if(abs(a3-a4)>1){
11         printf("-1\n");
12     }else if (a3 == a4){
13         if (a1<2&&a2<2){
14             printf("-1\n");
15 
16         }else if (a1-1>=a3&&a2>=a3){
17             a1=a1-a3-1;
18             a2=a2-a3;
19             for(int i=1;i<=a1;i++)    printf("4");
20             for(int i=1;i<=a3;i++)    printf("47");
21             for(int i=1;i<=a2;i++)    printf("7");
22             printf("4\n");
23 
24         }else if (a2-1>=a3&&a1>=a3){
25             a2=a2-1-a3;
26             printf("7");
27             for (int i=1;i<=a3;i++)    printf("47");
28             for (int i=1;i<=a2;i++)    printf("7");
29             printf("\n");
30 
31         }else{
32             printf("-1\n");
33 
34         }
35     }else if(a3>a4){
36         a1=a1-a3;
37         a2=a2-a3;
38         if(a1<0||a2<0){printf("-1\n");}
39         for (int i=1;i<=a1;i++)    printf("4");
40         for (int i=1;i<=a3;i++)    printf("47");
41         for (int i=1;i<=a2;i++)    printf("7");
42         printf("\n");
43     }else{
44         a1=a1-a4;
45         a1=a2-a4;
46         if(a1<0||a2<0){printf("-1\n");}
47         printf("7");
48         for (int i = 1; i <= a1; i++)    printf("4");
49         for (int i = 1; i <= a3; i++)    printf("47");
50         for (int i = 1; i <= a2; i++)    printf("7");
51         printf("4\n");
52     }
53 }
View Code

 

上一篇:F-47


下一篇:用bower命令创建项目