gpt4 book ai didi

C++ 代码神奇地将 1 添加到输出

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:52 24 4
gpt4 key购买 nike

所以我无法弄清楚这一点。 (显然)

基本上变量count是在开头声明的,然后只在一个地方修改或递增。预期的最终计数是 78682。当计数等于那个值时,我将打印出字符串“ok”。当计数增加到 78683 时,代码检查条件并打印字符串“not ok”。

它从不打印“not ok”,但在我们打印计数值的最后,它是 78683! c++什么时候递增的?

另一件事是,当下面的注释被取消注释时,最终结果变成了78682,虽然我只是不明白为什么。任何人? (哦,顺便说一句,代码需要一分钟才能运行......)

#include <stdio.h>

int main(){
int count=0, sum=0;

int length []={1,2,4,10,20,40,100,200};
int value [] ={200,100,50,20,10,5,2,1};
int tmp[8] ={0};

bool stop=false;

while(!stop){
sum=0;
for(int j=0,k=0; j<8; j++){
sum+=value[j]*tmp[j];
if(j==7){
if(sum==200){
count++;
if(count==73682) printf("ok\n");

if(count==73683) printf("not ok\n");
}

k=j;
tmp[k]++;
while(tmp[k]==length[k]+1){

tmp[k]=0;
k--;
tmp[k]++;

if(tmp[0]==2)
{
//tmp[0]--;
stop=true;
}
}

}
}
}

printf("Total %d.", count);
return 0;
}

最佳答案

在我的电脑上我得到

ok
Total 73682.

注释行和未注释行。因此我无法调试它。

但最有可能的假设是你得到错误结果的原因是数组访问越界。如果你写 tmp[anything]它可以是内存中的任何地方,包括存储计数的地方。所以你需要检查 0 <= anything && anything < 8 .您可以在这里访问:

 while(tmp[k]==length[k]+1){

tmp[k]=0;
k--;

请添加安全检查以确保k >= 0 .

附言我添加了支票:

 while(tmp[k]==length[k]+1){

tmp[k]=0;
k--;
if( k < 0 ) printf("oops\n");

我得到注释行

ok
oops
Total 73682.

我得到了未注释的行

ok
Total 73682.

所以您的程序中可能还有其他错误。抱歉,找不到。 (还知道程序应该做什么,你可以打印中间结果并检查它们。但是如果你得到 73683,你应该在你的计算机上看到越界访问)。

关于C++ 代码神奇地将 1 添加到输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20592123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com