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 }

 

posted @ 2022-04-20 17:35  爱吃虾滑  阅读(30)  评论(0编辑  收藏  举报