1. 程式人生 > 其它 >L1-027 出租

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 }