1. 程式人生 > 實用技巧 >2020.12.14vj補題

2020.12.14vj補題

A. Lucky Ticket

題意:就是說4與7是幸運數字,用4和7組成的數字也是幸運數字,問所給數字是不是幸運數字

思路:直接敲

程式碼:

 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開始,也就是說應該調整一下想問題時,判斷條件的先後問題

程式碼:

 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,然後直接輸出大的那個

程式碼:

 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保證最小

程式碼:

 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