简单暴力,没有任何技巧,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) 回帖