【问题标题】:while loops and variableswhile 循环和变量
【发布时间】:2020-11-09 15:21:49
【问题描述】:

我正在解决一个问题,如果某人有 k 个零食,他/她可以通过交换零食包获得一份奖励零食。

例如,如果我一开始有 8 个零食,如果我交换 3 个零食包,我会得到一个额外零食,我最终会得到 11 个零食,因为我从现有的 8 个零食中得到了两个,从四个点心离开了。我做了一个应该是正确的程序,我手动尝试了这个程序。

#include <stdio.h>

int main()
{
    int t, n1, input, k, bonus = 0, total=0, bis =0;
    scanf("%d", &t);
    while(t--){
        scanf("%d", &input);
        scanf("%d", &k);
        n1 = input;
        while(input>=k){
        bonus = bonus + input/k;
        input = bonus + (input-(k*(input/k)));
        }
        total = n1 + bonus;
        printf("%d\n", total);
    }

    return 0;
}

t 用于测试用例,input 用于某人首先吃的零食数量。

我已尝试搜索问题,似乎当我在其中分配另一个输入时,while 循环中变量input 的值将导致input 变量返回大随机数或与记忆。

我在这里做的真正错误是什么?以及如何解决?


  • t -- 重复测试的类型数
  • 输入 -- 最初拥有的零食数量
  • k -- 获得奖金所需的零食数量

【问题讨论】:

  • 你能发布你的作业文本而不是解释它吗?你的解释不清楚
  • 对不起,让我解释清楚
  • 我不明白“……还有剩下的四种零食中的一种。”
  • k 是我的例子,3。所以如果我一开始有 8 个零食,我可以用 6 个零食包换取 2 个奖励零食,这样我就剩下 4 个零食了(因为我吃了 6换包,所以我还剩两个,加了两个),我可以把3个零食包换成另一个零食,这样我一共8+2+1个零食
  • 第一次测试你得到正确的输出了吗?测试的错误输出是什么,该测试的输入是什么?

标签: c loops while-loop updating


【解决方案1】:

我认为问题在于 bonus 等需要在循环内重新初始化为零,即在非常测试之前。

事实上,我会将这些变量的声明(除了t 之外的所有变量)移到循环内部。

并且bonus 应该在内循环内重置。如果您没有调试器,请用铅笔和纸逐行遍历它,并记下每个变量中的值。经过简短的检查,在我看来,输入值为 11 和 3,当您运行当前代码时,奖金会越来越大,因此它循环了 1000 次,最终整数溢出为负数。

更正确的版本可能类似于(未经测试):

int main()
{
    int t; 
    scanf("%d", &t);
    while(t--){
        int input, k;
        scanf("%d", &input);
        scanf("%d", &k);
        int n1 = input;
        while(input>=k){
            int bonus = input/k;
            input += bonus - (k*bonus);
        }
        int total = n1 + bonus;
        printf("%d\n", total);
    }

    return 0;
}

请注意,这避免了在变量初始化之前声明变量。


编辑添加:

我不认为上述解决方案是正确的。也许它应该更像(尚未测试):

int main()
{
    int t; 
    scanf("%d", &t);
    while(t--){
        int input, k;
        scanf("%d", &input);
        scanf("%d", &k);
        int n1 = input;
        int bonus = 0;
        while(input>=k){
            int extra = input/k;
            bonus += extra;
            input += extra - (k*extra);
        }
        int total = n1 + bonus;
        printf("%d\n", total);
    }

    return 0;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多