题目连接: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 }