1042. Shuffling Machine (20)

题目连接:https://www.patest.cn/contests/pat-a-practise/1042

20分的题耗费了我这么多时间……还是C++不熟练啊!

我的主要思路就是使用map映射,关键字为序号,值为字符;每次将改变后的存入ans中,随后更新machine。注意map可以自动按照关键字进行由小到大的排序,因此可以方便地访问。

不熟悉之处:数字转字符串、可以直接machine=ans;

 1 #include<stdio.h>
 2 #include<map>
 3 #include<string>
 4 #include<iostream>
 5 #include<stdlib.h>
 6 using namespace std;
 7 int main()
 8 {
 9     map<int,string>Machine,Auto,ans,empty;
10     Auto[1]='S';Auto[2]='H';Auto[3]='C';Auto[4]='D';Auto[5]='J';
11     int i=1,cnt=1,j=1;
12     string s;
13     char sh[3];
14     string D;
15     while(j<=54)
16     {
17         if (i%14==0){i=1;cnt++;}
18         //itoa(i,sh,10);
19         sprintf(sh,"%d",i);
20         D=Auto[cnt];
21         Machine[j]=D+sh;
22         i++;
23         j++;
24     }
25     int K,rule[60];
26     scanf("%d",&K);
27     for (i=1;i<=54;i++)scanf("%d",&rule[i]);
28     i=1;
29     map<int,string>::iterator it;
30 
31     while(K--){
32         i=1;
33         for (it=Machine.begin();it!=Machine.end();it++) {
34         ans[rule[i++]]=it->second;
35         }
36         Machine=ans;
37         }
38 
39 int flag=0;
40     for (it=Machine.begin();it!=Machine.end();it++)
41     {
42         if(flag==0){cout<<it->second;flag=1;}
43         else cout<<" "<<it->second;
44     }
45     return 0;
46 }
原文地址:https://www.cnblogs.com/wuxiaotianC/p/6405333.html