pta L1-027 出租 (20 分)


题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805107638517760;

具体思路:

根据题目要求,要先输出降序且不重复的数字元素,我们很容易想到用集合,当然,需要注意的是,在这里采用了字符串输入,在一定程度上减少了内存与时间消耗;

在者,输出第二个数组的时候,我们可以采取这样的策略:

在输出第一个集合的时候,用一个数组来记录这个集合的元素,那这样,用这个集合的元素和原来数字直接进行匹配即可,如果相同就把下标存起来,最后输出就可以了

Talk is cheap. Show me the code.

 1 #include<bits/stdc++.h>//ptaL1-027 出租  
 2 using namespace std;
 3 string s;//输入数字 
 4 vector<char>v1;//用来检查是否匹配,即经过set排序之后输出时再把数字存进去 
 5 vector<int >v2;//最后用来输出index下标 
 6 int main()
 7 {
 8     std::ios::sync_with_stdio(false);
 9     set<char>::iterator it;//迭代器,相当于指针,set访问需要迭代器,map,list同 
10     set<char>c;//集合,自动排序加判重 
11     cin>>s;
12     for(register int i=0;i<s.length();i++)
13     {
14         c.insert(s[i]);
15     }
16     cout<<"int[] arr = new int[]{";
17     for(it=--c.end();it!=c.begin();it--)//为了好输出少输出一个 
18     {
19         cout<<*it<<","; 
20         v1.push_back(*it);//入库 
21     }
22     cout<<*it<<"};"<<endl;//补全 
23     v1.push_back(*it);
24     for(int i=0;i<s.length();i++)
25     {
26         for(register int j=0;j<v1.size();j++)
27         {
28             if(s[i]==v1[j])
29             {
30                 v2.push_back(j);//匹配,如果相同则将下标入库等待输出 
31                 break;//找到相同即可,找到后停止 
32             }
33         }
34     }
35     cout<<"int[] index = new int[]{";
36     for(register int i=0;i<v2.size();i++)
37     {
38         cout<<v2[i];
39         if(i<v2.size()-1)
40         cout<<",";
41     }
42     cout<<"};";
43     return 0;
44 }

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/245447.html

(0)
上一篇 2022年4月18日
下一篇 2022年4月18日

相关推荐

发表回复

登录后才能评论