#C语言 计蒜客 雇佣兵#怎么解决

c语言 计蒜客原题:雇佣兵
我感觉我做的没什么问题,但是计蒜客现实没有得到全部的分,希望大家帮我分析一下哪里没有考虑全面。

img

img

下面是我的的程序,我的想法已经标注过了

#include<stdio.h>
int main()
{
    int m,n,x,reduce;
    scanf("%d %d %d",&m,&n,&x);
    for(int i=1;i<=x;i++)
    {
        if(x*n>=m)//能补满就补充能量
        {
        if(m%n==0)
        reduce=m/n;//求用来恢复能量消耗的能量元素
        else reduce=m/n+1;//求用来恢复能量消耗的能量元素
        x=x-reduce;//求剩余的能量元素
        n=n+m/n;//求战斗后的战斗力
        }
        else if(x*n<m)
            break;
    }
    printf("%d",n);
    return 0;
}




img

【以下回答由 GPT 生成】

问题分析:

  1. 程序存在的问题:
  2. 在循环中,没有对mn进行更新,导致计算出的结果可能不正确。
  3. reduce变量的计算方式不正确,在if (m % n == 0)分支中,应该用m / n来计算,而不是m % n
  4. 循环中的判断条件存在问题,在else if (x * n < m)分支中,只判断了x * n < m,而没有考虑其他情况的处理。

  5. 为什么在DevC++上调试结果是正确的?

  6. 可能是因为在特定的输入情况下,导致程序得出了正确的结果。但是这并不代表代码是正确的,需要进行优化和修复。

下面是修复后的代码实现:

#include <stdio.h>

int main()
{
    int m, n, x, reduce;
    scanf("%d %d %d", &m, &n, &x);

    for (int i = 1; i <= x; i++)
    {
        if (x * n >= m) // 能补满能量就补充能量
        {
            if (m % n == 0)
                reduce = m / n; // 求用来恢复能量消耗的能量元素
            else
                reduce = m / n + 1; // 求用来恢复能量消耗的能量元素

            x = x - reduce; // 求剩余的能量元素
            n = n + reduce; // 求战斗后的战斗力
            m = m - reduce * n; // 更新剩余的能量值
        }
        else 
            break;
    }

    printf("%d", n);

    return 0;
}

修复后的代码更新了几个地方: - 在能补满能量的情况下,更新了剩余的能量元素x,战斗力n和剩余的能量值m。 - 在循环的结束条件中,只要不能补满能量,就会跳出循环。

这样修复后的代码应该能解决原先的问题,确保计算结果的正确性。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

第19行,输出里参数前面不需'&'符,修改如下,供参考:

#include<stdio.h>
int main()
{
    int m, n, x, reduce;
    scanf("%d %d %d", &m, &n, &x);
    for (int i = 1; i <= x; i++)
    {
        if (x * n >= m)//能补满就补充能量
        {
            if (m % n == 0)
                reduce = m / n;//求用来恢复能量消耗的能量元素
            else reduce = m / n + 1;//求用来恢复能量消耗的能量元素
            x = x - reduce;//求剩余的能量元素
            n = n + m / n;//求战斗后的战斗力
        }
        else if (x * n < m)
            break;
    }
    printf("%d", n);  //printf("%d", &n); 修改
    return 0;
}