240506.LeetCode——2769.找出最大的可达成数字

文章讨论了一个编程问题,如何在C语言中计算给定整数num和操作次数t下,可以通过不超过t次增减操作变为num的可达成数字的最大值。提供了一种递减遍历的解法和解题库中大佬的简洁解法,涉及思路分析和个人刷题经历分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

给你两个整数 num 和 t 。

如果整数 x 可以在执行下述操作不超过 t 次的情况下变为与 num 相等,则称其为 可达成数字 :

  • 每次操作将 x 的值增加或减少 1 ,同时可以选择将 num 的值增加或减少 1 。

返回所有可达成数字中的最大值。可以证明至少存在一个可达成数字。

EX1.

7806577dd5dc40d7b3400476227ed1d6.jpg

 EX2.

7860f1916a864d44a650015430772fd4.jpg

提示:

  • 1 <= num, t <= 50

代码实现:

C语言:

//自己想的.

int theMaximumAchievableX(int num, int t)
{
    int result;
    for(result=50;;result--)
    {
        if((num+t)==(result-t))
        {
            
            return result;
            break;
        }
    }

}

思路:

题目说的是一个数减一等于一个数加一,于是选择用if语句,找到符合的情况,然后考虑到遍历,并且是找出最大的数,所以考虑递减,而且题目给出了提示,提示上限是50,所以这个方法完全可行,最后返回循环变量即可。

 

//题解库中大佬的解法

int theMaximumAchievableX(int num, int t)

{
    return num + t * 2;//可读性有点差...
}

 思路:

 

其实原理差不多就是我想的num+t==x-t,移项之后,就变成了x=num+2*t,然后直接return,如果不考虑运行时间最优,内存效率最高的话,大佬的题解可以引入一个变量result,最后return result,anyway,我还是没有想到可以移项,主要是担心改变了运算优先级顺序然后出错...

总结

       先扯点别的,昨天刚刚结束五一假期,感觉五一真的什么都没干,说好要每日刷力扣的,结果五天,一天都没刷...还是被自我感动的,anyway,今天开始应该会有一段空窗期,打算用来补之前落下的各种作业,然后这周还是保持有空刷力扣吧(想起来上周三貌似没刷力扣...周三是我固定给自己必须刷题的日子)。虽然现在这些题都很简单,都是水题,主要目的是建立起刷题的习惯,循序渐进吧!提一嘴,我这个刷题顺序是乐扣官方的题目通过率降序刷的。

       这个题没有什么难度,写一遍就通过了,只能说用来练练细节吧,今天算是作为五一休假重启过渡期吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值