课设自主训练

粘代码~

1.随意组合

ee17f23e618a41ac8ccaf5309d3c6e6e.png

#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

7579a90e9e454f3980065c5187170f54.png

这题输出描述有点模糊,大概意思倒是有

#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.电话号码

 31c5eed1a04b4a6eaeb269953da311b7.png

#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UmVfX1BvaW50

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值