L1-027 出租
阿新 • • 發佈:2022-04-20
題目連結 https://pintia.cn/problem-sets/994805046380707840/problems/994805107638517760
兩種方式
一、從輸出的第一行可以發現是去重+排序,顯然要用set。(其實不用也可以emm)
把set中的數(也就是題幹中的arr陣列)存入v1中,從電話號碼的第一位開始判斷在v1的位置,將下標存在v2中,最後輸出v2。
放AC程式碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 string s; 4 vector<char>v1;//存arr 5 vector<int>v2;//存對應下標 6 set<char>c; 7 int main() 8 { 9 set<char>::iterator it; 10 //輸入電話號碼存入set中 11 cin>>s; 12 for(unsigned int i=0;i<s.length();i++) 13 c.insert(s[i]); 14 //第一行輸出 15 cout<<"int[] arr = new int[]{"; 16 for(it=--c.end();it!=c.begin();it--)17 { 18 cout<<*it<<","; 19 v1.push_back(*it); 20 } 21 cout<<*it<<"};"<<endl; 22 v1.push_back(*it); 23 //存下標 24 for(unsigned int i=0;i<s.length();i++) 25 { 26 for(unsigned int j=0;j<v1.size();j++) 27 { 28 if(s[i]==v1[j]) 29 v2.push_back(j); 30 } 31 } 32 //第二行輸出 33 cout<<"int[] index = new int[]{"; 34 for(unsigned int i=0;i<v2.size();i++) 35 { 36 cout<<v2[i]; 37 if(i<v2.size()-1) 38 cout<<","; 39 } 40 cout<<"};"; 41 return 0; 42 }
二、
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 char str[12]; 6 int arr[10]= {0},index[10],num; 7 scanf("%s",str); 8 for(int i=0; i<11; i++) 9 { 10 arr[str[i]-'0']++; 11 } 12 printf("int[] arr = new int[]{"); 13 num = 0; 14 int a[10]; 15 for(int i=9; i>=0; i--) 16 { 17 if(arr[i]) 18 { 19 a[num]=i; 20 num++; 21 } 22 } 23 for(int i=0; i<num; i++) 24 { 25 printf("%d",a[i]); 26 if(i<num-1) printf(","); 27 } 28 printf("};\n"); 29 printf("int[] index = new int[]{"); 30 for(int i=0; i<11; i++) 31 { 32 for(int j=0; j<num; j++) 33 { 34 if((str[i]-'0')==a[j]) 35 { 36 printf("%d",j); 37 break; 38 } 39 } 40 if(i<10) printf(","); 41 } 42 printf("};\n"); 43 return 0; 44 }