C++ 如何打乱一个数组顺序,然后复原为原来的值

如题所述

#include<iostream>using namespace std;int main(){ char str[]="abcdefg123456789"; char key[]="8635"; char temp; /*利用秘钥乱序*/ for(int j = 0; j < 2; j++) //对于key的前两位 for(int i = 0;(i+(key[j]-'0'))<=16; i++) { if(i%2!=0)//奇数位与其后面第key[j]位交换 { temp = str[i+(key[j]-'0')]; str[i+(key[j]-'0')] = str[i]; str[i] = temp; } } for(int i = 0; i < 16; i++) cout<<str[i]<<" "; cout<<endl; for(int j = 2; j < 4; j++) //对于key的后两位 for(int i = 0;(i+(key[j]-'0'))<=16; i++) { if(i%2==0)//偶数位与其后面第key[j]位交换 { temp = str[i+(key[j]-'0')]; str[i+(key[j]-'0')] = str[i]; str[i] = temp; } } for(int i = 0; i < 16; i++) cout<<str[i]<<" "; cout<<endl; /*利用秘钥复原*/ for(int j = 3; j >= 2; j--) //对于key的后两位 for(int i = 16;(i-(key[j]-'0'))>=0; i--) { if(i%2!=0)//奇数位与其前面第key[j]位交换 { temp = str[i-(key[j]-'0')]; str[i-(key[j]-'0')] = str[i]; str[i] = temp; } } for(int i = 0; i < 16; i++) cout<<str[i]<<" "; cout<<endl; for(int j = 1; j >= 0; j--) //对于key的前两位 for(int i = 16;(i-(key[j]-'0'))>=0; i--) { if(i%2!=0)//奇数位与其前面第key[j]位交换 { temp = str[i-(key[j]-'0')]; str[i-(key[j]-'0')] = str[i]; str[i] = temp; } } for(int i = 0; i < 16; i++) cout<<str[i]<<" "; system("pause"); return 0;}

我写了个,你看符合不
温馨提示:答案为网友推荐,仅供参考
相似回答