如何解决while循环和变量
我正在解决一个问题,如果有人吃k种零食,他/她可以通过交换零食包装获得一份额外的零食。
例如,如果我一开始有8种零食,而如果我交换3个零食套餐,我将获得1个额外的零食,那么我最终将得到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
用于某人最初拥有的零食数量。
我尝试搜索问题,似乎当我在循环中分配另一个输入时,变量input
的值将导致input
变量返回大随机数或与记忆有关的东西。
我在这里真正犯的错误是什么?以及如何解决?
- t-重复测试的类型数
- 投入-最初拥有的小吃数量
- k-获得奖励所需的零食数量
解决方法
我认为问题在于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",&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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。