1、洗牌
int main() {
int T, n, k;
cin >> T;
while (T--)
{
cin >> n >> k;
int num = 2 * n;
vector<int> card(num);
for (int i = 0; i < num; ++i)
{
cin >> card[i];
}
for (int i = 0; i < k; ++i)
{
vector<int> tmp(card.begin(), card.end());
for (int j = 0; j < n; ++j)
{
card[2 * j] = tmp[j]; //左半部分的映射关系
card[2 * j + 1] = tmp[j + n]; //右半部分的映射关系
}
}
for (int i = 0; i < num - 1; ++i)
{
cout << card[i] << " ";
}
cout << card[num - 1] << endl;
}
}
2、MP3光标位置(分支语句)
int main() {
int n;
string cmd;
while (cin >> n >> cmd)
{
int num = 1, first = 1;
if (n <= 4)
{
//总数小于等于4
for (int i = 0; i < cmd.size(); ++i)
{
if (num == 1 && cmd[i] == 'U')
num = n;
else if (num == n&&cmd[i] == 'D')
num = 1;
else if (cmd[i] == 'U')
num--;
else
num++;
}
for (int i = 1; i <= n; ++i)
{
cout << i << " ";
}
cout << endl;
cout << num << endl;
}
else
{
//总数大于4 解析命令
for (int i = 0; i < cmd.size(); ++i)
{
//第一页 第一首歌 向上
if (first == 1 && num == 1 && cmd[i] == 'U')
{
first = n - 3;
num = n;
}
//最后一页 最后一首歌 向下
else if (first == n - 3 && num == n&&cmd[i] == 'D')
{
first = 1;
num = 1;
}
//不是第一页 第一首歌 向上
else if (first != 1 && num == first&&cmd[i] == 'U')
{
first--;
num--;
}
//不是最后一页 最后一首歌 向下
else if (first != n - 3 && num == first + 3 && cmd[i] == 'D')
{
first++;
num++;
}
else if (cmd[i] == 'U')
num--;
else
num++;
}
for (int i = first; i <= first + 3; ++i)
{
cout << i << " ";
}
cout << endl;
cout << num << endl;
}
}
return 0;
}
3、小易升级之路
//辗转相除法
int GCD(int a, int b)
{
int c;
while (c = a%b)
{
a = b;
b = c;
}
return b;
}
int GetPowerValue(int n, int power)
{
vector<int> num(n); //防御值
for (int i = 0; i < n; ++i)
{
cin >> num[i];
}
for (int i = 0; i<n; ++i)
{
if (power>num[i])
power += num[i];
else
power += GCD(power, num[i]);
}
return power;
}
int main()
{
int n, a, power;
while (cin >> n >> a)
{
power = GetPowerValue(n, a);
cout << power << endl;
}
}
4、找出字符串中第一个只出现两次的字符(多种方法)
//暴力法
char GetFirstOneChar(const string &str)
{
int j = 0;
for (int i = 0; i < str.size(); ++i)
{
for (j = 0; j < str.size(); ++j)
{
if (j == i)
continue;
if (str[i] == str[j])
break;
}
if (j >= str.size())
return str[i];
}
return -1;
}
//哈希法
char GetFirstOneChar_Hash(const string &str)
{
int hash[256] = { 0 };
for (int i = 0; i < str.size(); ++i)
{
hash[str[i]]++; //统计字符出现的次数
}
for (int i = 0; i < str.size(); ++i)
{
if (hash[str[i]] == 1)
return str[i];
}
return -1;
}
//string类函数查找法
char GetFirstOneChar_String(const string &str)
{
for (int i = 0; i < str.size(); ++i)
{
int index1 = str.find(str[i]);
int index2 = str.rfind(str[i]);
if (index1 == index2)
return str[i];
}
return -1;
}
int main()
{
string str;
char res;
while (getline(cin, str))
{
//res=GetFirstOneChar(str);
//res=GetFirstOneChar_Hash(str);
res = GetFirstOneChar_String(str);
if (res == -1)
cout << -1 << endl;
else
cout << res << endl;
}
return 0;
}