while 循环和变量

while loops and variables

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

例如,如果我一开始有 8 个零食,如果我交换 3 个零食包,我会得到一个额外的零食,我最终会得到 11 个零食,因为我有 8 个中有 2 个,还有 1 个更多来自剩下的四种小吃。我做了一个程序,应该是正确的,我已经手动尝试了程序。

#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 变量 return 大随机数或与内存有关的东西。

我在这里犯的真正错误是什么?我该如何解决?


我认为问题是 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;
}