1. 程式人生 > >牛客網Nowcoder 牛客練習賽13 A. 幸運數字Ⅰ B.幸運數字Ⅱ(數組或者dfs) C.幸運數字Ⅲ(思維)

牛客網Nowcoder 牛客練習賽13 A. 幸運數字Ⅰ B.幸運數字Ⅱ(數組或者dfs) C.幸運數字Ⅲ(思維)

tps sum quest 兩個 long 練習 clas tdi return

A.幸運數字Ⅰ

鏈接:https://www.nowcoder.com/acm/contest/70/A
來源:牛客網 水題。 代碼:
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<cstdlib>
 7 using namespace std;
 8 char s[60];
 9 int main(){
10     cin>>s;
11 int len=strlen(s); 12 int num1=0,num2=0; 13 for(int i=0;i<len;i++){ 14 if(s[i]==4)num1++; 15 if(s[i]==7)num2++; 16 } 17 if(num1>=num2&&num1!=0)cout<<"4"<<endl; 18 else if(num1<num2)cout<<"7"<<endl; 19 else cout<<"
-1"<<endl; 20 }



B.幸運數字Ⅱ 鏈接:https://www.nowcoder.com/acm/contest/70/B
來源:牛客網 這個題就是找出來數據範圍內的所有的幸運數,然後直接區間累加起來就可以了。 兩個版本,一個數組找的所有的幸運數,一個dfs找的所有的幸運數。 代碼1(數組):
 1 //B-數組版
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<cstdlib>
 7
#include<algorithm> 8 #include<queue> 9 using namespace std; 10 typedef long long ll; 11 const int maxn=2048; 12 const int inf=1e9+10; 13 ll a[maxn]; 14 ll kuaisumi(int a,int b){ 15 ll ans=1; 16 while(b){ 17 if(b%2==1)ans=ans*a; 18 a=a*a; 19 b=b/2; 20 } 21 return ans; 22 } 23 void fun(){ 24 a[1]=4,a[2]=7;ll h=2; 25 for(ll i=2;i<=10;i++){ 26 ll x=kuaisumi(2,i); 27 ll y=x/2; 28 ll z=kuaisumi(10,i-1); 29 ll k=h+1; 30 for(ll j=h-y+1;j<=h;j++){ 31 a[k]=4*z+a[j]; 32 a[x/2+k++]=7*z+a[j]; 33 } 34 h+=x; 35 } 36 } 37 int main(){ 38 fun(); 39 int l,r; 40 cin>>l>>r; 41 ll ans=0; 42 for(int i=1;i<=2046;i++){ 43 if(a[i]>=l){ 44 if(a[i]<r){ 45 ans+=(a[i]-l+1)*a[i]; 46 l=a[i]+1; 47 } 48 else{ 49 ans+=(r-l+1)*a[i]; 50 break; 51 } 52 } 53 } 54 cout<<ans<<endl; 55 }

代碼2(dfs):

 1 //B-DFS版
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<cstdlib>
 7 #include<algorithm>
 8 #include<queue>
 9 using namespace std;
10 typedef long long ll;
11 const int maxn=2048;
12 ll a[maxn];
13 int h=0;
14 void dfs(ll x,int c){
15     a[h++]=x;
16     if(c==9)return;
17     dfs(x*10+4,c+1);
18     dfs(x*10+7,c+1);
19 }
20 int main(){
21     a[h++]=4444444444;
22     dfs(0,0);
23     sort(a,a+h);
24     int l,r;
25     cin>>l>>r;
26     ll ans=0;
27     for(int i=0;i<h;i++){
28         if(a[i]>=l){
29             if(a[i]<r){
30                 ans+=(a[i]-l+1)*a[i];
31                 l=a[i]+1;
32             }
33             else{
34                 ans+=(r-l+1)*a[i];
35                 break;
36             }
37         }
38     }
39     cout<<ans<<endl;
40 }



C.幸運數字Ⅲ 鏈接:https://www.nowcoder.com/acm/contest/70/C
來源:牛客網 這個題447和477是特殊的,其他的就沒什麽了。 代碼:
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int maxn=1e5+10;
 8 char s[maxn];
 9 int vis[maxn];
10 int main(){
11     int n,k;
12     cin>>n>>k;
13     cin>>s+1;
14     memset(vis,0,sizeof(vis));
15     int num=0;
16     for(int i=1;i<=n;i++){
17         if(i+1<=n&&s[i]==4&&s[i+1]==7){
18             vis[i]=1;
19             num++;
20         }
21     }
22     //cout<<num<<endl;
23     if(num==0){
24         for(int i=1;i<=n;i++)
25             cout<<s[i];
26         cout<<endl;
27     }
28     else{
29         for(int i=1;i<=n;i++){
30             if(k==0)break;
31             if(vis[i]==1){
32                 if(i%2==0){
33                     if(s[i-1]==4){
34                         if(k%2==0)break;
35                         else{
36                             s[i]=7;
37                             break;
38                         }
39                     }
40                     else {k--;s[i]=7;vis[i]=0;}
41                 }
42                 else{
43                     if(s[i+2]==7){
44                         if(k%2==0)break;
45                         else{
46                             s[i+1]=4;
47                             break;
48                         }
49                     }
50                     else{k--;s[i+1]=4;vis[i]=0;}
51                 }
52             }
53         }
54     }
55     for(int i=1;i<=n;i++)
56         cout<<s[i];
57     cout<<endl;
58 }

溜了,去寫別的了。

牛客網Nowcoder 牛客練習賽13 A. 幸運數字Ⅰ B.幸運數字Ⅱ(數組或者dfs) C.幸運數字Ⅲ(思維)