蓝桥杯----最大数字

题目展示:

给定一个正整数 N 。你可以对 N 的任意一位数字执行任意次以下 2 种操 作:

  1. 将该位数字加 1 。如果该位数字已经是 9 , 加 1 之后变成 0 。

  2. 将该位数字减 1 。如果该位数字已经是 0 , 减 1 之后变成 9 。

你现在总共可以执行 1 号操作不超过 A 次, 2 号操作不超过 B 次。 请问你最大可以将 N 变成多少?


思路:输入字符串,转成数组,先确定减数,再确定加数,最后输出

代码:

#include<iostream>
using namespace std;
int main()
{
	string figure_1 ;//创建字符串
	cin >> figure_1;//输入
	int a, b;
	cin >> a >> b;
	int figure[20] = {0};//创建数组
	int y = figure_1.length();//字符串长度
	for (int i = 0; i < y; i++)//字符转化成数组
	{
		figure[i] = figure_1[i] - '0';
	}

	int m, x;
	int c = 0;
	int n = 0;
	for (int i = 0; i < y ; i++)//遍历数组
	{
		if (b > 0 && figure[i]-b<0)//确定减数c
		{
			for (x = 0; x <= b; x++)
			{
				if (figure[i] + 10 - x == 9)
				{
					c =  x;
					figure[i] =9;
				}
			}
			b = b - c;
		}
		if (a > 0 && figure[i] != 9)//确定加数n
		{
			for (m = 0; m <= a; m++)
			{
				if (m + figure[i] <= 9)
				{
					n = m;	
				}
			}
			figure[i] = figure[i] + n;
			a = a - n;
		}
	}
	for (int i = 0; i < y; i++)
	{
		cout << figure[i];
	}
	cout << endl;
}

结论:检测通过70%. //我要发疯啊啊啊啊啊啊啊啊,什么鬼东西  冷静冷静,一搜,吧啦吧啦算法,好的,开学(微笑,微笑)啊哈哈哈哈哈哈哈(阴暗爬行,爬行)(发疯)


先学个DFS玩玩

非常好,根本学不会,好的,不能内耗,先背吧(笑脸)

输入一个数字n,然后得到1到n所有数的排列

const int N = 10;
int ans[N];
bool mark[N];
int n;
void dfs(int u)
{
    //"回头"的条件
    if (u == n)
    {
        for (int i = 0; i < n; i++)
        {
            cout << ans[i] << " ";
        }
        puts("");
        return;
    }
    for (int i = 1; i <= n; i++)
    {
        if (mark[i] == 0)
        {
            mark[i] = 1;
            ans[u] = i;
            dfs(u + 1);
            //复原
            mark[i] = 0;
            ans[u] = 0;
        } 
    } 
}

int main()
{
    cin >> n;
    dfs(0);
    return 0;
}

理解不来一点, 但是大致框架是这样的


先理解两天,过两天写emmm

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值