粘代码~
1.随意组合
#include <iostream>
#include <cstring>
using namespace std;
int a[5] = {0,2,3,5,8}, b[5] = {0,1,4,6,7};
int res[5], cnt = 0;
bool vis[5];
void dfs(int deep){
if(deep > 4){ //得到可用的组合,进行验证
int ans1 = 0, ans2 = 0;
for(int i = 1; i <= 4; i++){
ans1 += (a[i]*10+res[i]) * (a[i]*10+res[i]);
ans2 += (res[i]*10+a[i]) * (res[i]*10+a[i]);
}
//如果两结果相等就结果数加一
if(ans1 == ans2) cnt++;
return;
}
for(int i = 1; i <= 4; i++){
if(vis[i]) continue;
vis[i] = true; res[deep] = b[i];
dfs(deep+1); //选取b[i],进行下一层选取
vis[i] = false; //回溯
}
}
int main(void)
{
memset(vis, false, sizeof(vis));
dfs(1);
cout <<cnt;
return 0;
}
2.奇怪的比赛
#include <iostream>
using namespace std;
char res[11]; //答题状态记录
void dfs(int deep, int num){
if(deep > 10){
//如果分数为100,输出
if(num == 100){
for(int i = 1; i <= 10; i++)
cout <<res[i];
cout <<endl;
}
return ;
}
//记录该题的结果,进行下一道题的判断
//win
res[deep] = '1'; dfs(deep+1, num*2);
//lose
res[deep] = '0';
dfs(deep+1, (num > deep ? num - deep : 0));
}
int main(void)
{
dfs(1, 10);
return 0;
}
3.palindrom
这题输出描述有点模糊,大概意思倒是有
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
map<int, char>mp;
int num;
bool ans = false;
//回文判断
bool check(string s){
int l = 0, r = s.length() - 1;
while(l <= r){
if(s[l] != s[r]) return false;
l++; r--;
}
return true;
}
//进制转换
string change(int num, int op){
string temp = "";
do{
temp = mp[num % op] + temp;
num /= op;
}while(num != 0);
return temp;
}
int main(void)
{
//进制映射表
for(int i = 0; i <= 9; i++) mp[i] = (i + '0');
mp[10] = 'A'; mp[11] = 'B';
mp[12] = 'C'; mp[13] = 'D';
mp[14] = 'E'; mp[15] = 'F';
cin >>num;
for(int i = 2; i <= 16; i++){
//判断数字在i进制表示下是否回文
if(check(change(num, i))){
printf("Number %d is palindrom when basis is %d\n", num, i);
ans = true;
}
}
//2~16进制均不能回文
if(!ans)
printf("Number %d is not palindrom", num);
return 0;
}
4.电话号码
#include <bits/stdc++.h>
using namespace std;
map<char, int>mp;
string s; int n;
int main(void)
{
//字母表映射
mp['a'] = 2, mp['b'] = 2, mp['c'] = 2;
mp['d'] = 3, mp['e'] = 3, mp['f'] = 3;
mp['g'] = 4, mp['h'] = 4, mp['i'] = 4;
mp['j'] = 5, mp['k'] = 5, mp['l'] = 5;
mp['m'] = 6, mp['n'] = 6, mp['o'] = 6;
mp['p'] = 7, mp['q'] = 7, mp['r'] = 7, mp['s'] = 7;
mp['t'] = 8, mp['u'] = 8, mp['v'] = 8;
mp['w'] = 9, mp['x'] = 9, mp['y'] = 9, mp['z'] = 9;
//读入数据,遍历s输出结果
cin >>n;
while(n--){
cin >>s;
for(int i = 0; i < s.length(); i++)
cout <<mp[s[i]];
cout <<endl;
}
return 0;
}