gpt4 book ai didi

C 程序给出了不同的答案,其中包含一个 float 的 rand() 调用

转载 作者:行者123 更新时间:2023-12-02 07:21:59 24 4
gpt4 key购买 nike

当我编写这段代码时,我正在尝试解决一个竞争性编程问题:

#include<stdio.h>
#include <stdlib.h>

int brr[100];
int n,arr[100];
int s[100];

int dyn(int num){
int i,ans;
if(brr[num]!=-1){
return brr[num];}

for(i=0;i<n;i++){
if(arr[i]==num){
ans=1;
s[num]=arr[i];
break;}
else if(arr[i]<num){
if(i==0){
ans=1+dyn(num-arr[i]);
s[num]=arr[i];}
else {
if(ans>1+dyn(num-arr[i])){
ans=1+dyn(num-arr[i]);
s[num]=arr[i];
}}}}
brr[num]=ans;
return ans ;
}

int main(){
scanf("%d",&n);
int i;
for(i=0;i<n;i++){
scanf(" %d",&arr[i]);
}
int num=0;
scanf(" %d",&num);
for(i=0;i<=num;i++){
brr[i]=-1;}
brr[0]=0;
for(i=1;i<=num;i++){
dyn(i);
//rand();
}
printf("\n%d\n",dyn(num));
while(num>0){
printf("\t%d",s[num]);
num=num-1;
}
return 0;
}

第 44 行注释掉了 rand()。如果我在 rand() 注释掉的情况下执行代码,我得到的结果是

2
6 6 6 6 6 5 0 0 2 1

对于输入 4 6 5 2 1 10

删除评论后我得到

2
5 6 6 6 6 5 2 2 2 1

对于相同的输入。

这是怎么回事?

最佳答案

在函数 dyn 行中

if(ans>1+dyn(num-arr[i])){

ans 可以在未初始化的情况下使用。这导致程序的行为未定义。

关于C 程序给出了不同的答案,其中包含一个 float 的 rand() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43165266/

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