L1-027 出租
题目链接 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 }