当我尝试运行代码时,我将第二个输出作为垃圾值。谁能说出该代码中的错误
Posted
技术标签:
【中文标题】当我尝试运行代码时,我将第二个输出作为垃圾值。谁能说出该代码中的错误【英文标题】:When I tried to run the code I was getting the 2nd output as garbage value. Can anyone tell fault in that code 【发布时间】:2015-06-17 07:50:50 【问题描述】:#include <iostream>
using namespace std;
int main()
int T,i,j,N,K;
cin >> T;
int n[T],x;
for(i=1; i<=T; i++)
cin >> N >> K;
for(int j=1; j<=N; j++)
cin >> x;
n[i]+=x/K;
x=0;
N=0;K=0;
for(i=1; i<=T; i++)
cout << n[i] << endl;
return 0;
问题是“您的程序将在一个或多个测试用例上进行测试。输入的第一行将是单个整数 T,即测试用例的数量(1 ≤ T ≤ 100)。然后是测试用例,每个测试用例分为两行。每个测试用例的第一行包含两个整数 N,不同糖果的数量(1 ≤ N ≤ 100)和 K,如上所述,能让孩子开心的糖果的最小数量(1 ≤ K ≤ 100). 每个测试用例的第二行包含 N 个整数,用一个空格分隔,是每种类型的可用糖果数量。每个类型至少有 1 个糖果,最多 100 个糖果类型。”
sample input: 2
3 2
4 5 7
3 8
4 5 7
sample output:
7
0
when the i tried the above code the answer that i got like:
input:2
3 2
5 6 8
2 2
9 1
output:
9
-880625041
当我尝试运行代码时,我将第二个输出作为垃圾值。谁能告诉我该代码中的错误
【问题讨论】:
你真的应该学会在编译时启用所有警告和调试信息(例如使用g++ -Wall -Wextra -g
)以及如何使用调试器和其他工具(例如valgrind等...)
了解更多关于C++ programming,使用其标准containers,如std::vector
【参考方案1】:
问题来了:
n[i]+=x/K;
这等价于n[i]=n[i]+x/K;
,所以它使用n[i]
的先验值。但是,您没有为数组n
的元素设置任何先前值。所以,首先将数组初始化为0
。
for(i=0;i<T;i++)
n[i] = 0;
另外,在这段代码中:
for(int j=1; j<=N; j++)
你确定N
总是小于T
数组的大小吗? (还要注意基于 0 的索引)。
【讨论】:
【参考方案2】:C 和 C++ 中的数组是从零开始的。运行从 0 到 N - 1 和 T - 1 的循环。
在使用数组值之前不要初始化它们。正式地,您的程序行为是未定义的。 (我认为您的意思是 n[i]=
而不是 n[i]+=
。)
像int n[T]
这样的可变长度数组是编译器扩展。请记住这一点,因为它可能会影响便携性。
【讨论】:
以上是关于当我尝试运行代码时,我将第二个输出作为垃圾值。谁能说出该代码中的错误的主要内容,如果未能解决你的问题,请参考以下文章