简单暴力,没有任何技巧,C++代码
原题目描述。(题目中提示,每个数字的二进制为32bit)1.输入n个无符号整数2.给每个数字增加干扰措施。2.1 干扰1:让每个整数的二进制位置上的数字交换,即(2*i)与(2*i+1)交换,i=0:15。以下讨论说的都是二进制数。2.2 干扰2:假设三个数a,b,c,a(XXXXXXXXXXa2a1)的最后两位弹出a1,a2;a1,a2进入b的头,同时b的最后两位b1b2弹出,此时b变为(a2a1XXXXXXXXXXXX),c同理,变为(b2b1XXXXXXXXXXXX),将c的尾巴c1c2弹入a的头,a变为(c2c1XXXXXXXXXXXXX)。最终效果:a(XXXXXXXXXXXXa2a1)->(c2c1XXXXXXXXXXXXX);b(XXXXXXXXXXXXb2b1)->(a2a1XXXXXXXXXXXX);c(XXXXXXXXXXXXc2c1)->(b2b1XXXXXXXXXXXX);。。。。。。应该叙述清楚了。倘若只有一个数a,这个应该好分析3.输出每个***扰后的数字(十进制的,同空格隔开)。
#include<iostream> #include<vector> #include<string> #include<unordered_map> #include<algorithm> using namespace std; string zhuanhuan1(unsigned int a)//将数转换为32位数的二进制 { string temp; int t = 0; for (int i = 0; i < 32; i++) { t = a % 2; temp.push_back(t + '0'); a = a / 2; } reverse(temp.begin(), temp.end()); return temp; } unsigned int zhuanhuan2(string s)//将32为二进制的数转换为十进制数 { unsigned int t; unsigned int x = 1; unsigned int ans=0; for (int i = 31; i >=0; i--) { t = x*(s[i] - '0'); ans += t; x *= 2; } return ans; } void ganrao1(string &s) //干扰措施1 { for (int i = 0; i < 16; i++) swap(s[i * 2], s[i * 2 + 1]); } void ganrao2(string &s,char l1,char l2) //干扰措施2 { s.pop_back(); s.pop_back(); reverse(s.begin(), s.end()); s.push_back(l1); s.push_back(l2); reverse(s.begin(), s.end()); } int main() { //输入 unsigned int temp; vector<unsigned int>arr; while (cin >> temp ) arr.push_back(temp); vector<string>str(arr.size()); //转换为二进制并增加干扰1 for (int i = 0; i < arr.size(); i++) { str[i] = zhuanhuan1(arr[i]); //cout << str[i] << endl; ganrao1(str[i]);//干扰1 //cout << str[i] << endl; } //施加干扰2 char f_l1 = str[0][str[0].size() - 1];//第一个数的二进制后两位 char f_l2 = str[0][str[0].size() - 2]; char l_l1 = str[str.size() - 1][str[0].size() - 1];//最后一个数的二进制的后两位 char l_l2 = str[str.size() - 1][str[0].size() - 2]; if (str.size() > 1) { for (int i = 1; i < str.size(); i++) { char l = str[i][str[i].size() - 1];//记录当前数字的最后两位 char r = str[i][str[i].size() - 2]; ganrao2(str[i], f_l1, f_l2); //cout << "干扰2" << str[i] << endl;; f_l1 = l; f_l2 = r; } } ganrao2(str[0], l_l1, l_l2); //转换回十进制的数 for (int i = 0; i < arr.size(); i++) { arr[i] = zhuanhuan2(str[i]); cout << arr[i] << " "; } return 0; }
全部评论
(4) 回帖