【发布时间】:2022-01-07 09:22:13
【问题描述】:
我想在数组 z 中搜索 k 值的最低小计,其中包含由用户输入填充的 n 个元素。这适用于 k==1,但我不明白为什么我的代码不适用于 k>1。 我的程序输出了错误的索引和小计。
从main调用函数,在循环中用n个int值元素填充数组直到它被填充,要求k的所需长度。
请帮助我理解我做错了什么
#include <stdio.h>
void lowest_subtotal(int z[], int n, int k){
int t[]={0};
int i = 0, position = 0, tempmin;
if(k==1){ //working 100%
while(i<n){
if(z[i]<tempmin){
tempmin=z[i];
position=i;
}
i++;
}
printf("Lowest subtotal on Index %d. (sum: %d.)", position, tempmin);
}
else{
//calculate subtotals
while(i<=n){
for(int j=0; j<k; j++){
if(z[i+j]<0){
t[i] -= z[j];
}
else{
t[i] += z[j];
}
}
i++;
}
//search for lowest subtotal
i = 0;
while(i<n-k+1){
if(t[i] < tempmin){
tempmin = t[i];
position=i;
}
i++;
}
//wrong result of index and sum?
printf("Lowest subtotal on Index %d. (sum: %d.)",position-k-1,tempmin);
}
}
int main(){
int n,k; //length of vector, length of subtotal
printf("n: ");
scanf("%d",&n);
int z[99] = { 0 }; //initialize array
printf("input elements:\n");
for(int i=0; i<n; i++){
scanf("%d",&z[i]);
}
printf("length of subtotal?: ");
scanf("%d",&k);
lowest_subtotal(z,n,k);
}
【问题讨论】:
-
@vnmsc 为什么减去一个负值 t[i] -= z[j];?
-
int t[]={0};定义数组t并为 one 元素定义空间,使用0初始化该单个元素。 -
变量
n中有数组z的元素数。为什么不使用它来定义z并使用适当的大小呢?如int z[n];? -
另外,请尝试提出语义上重要的变量名称,而不是非描述性的单字母名称。
-
在其他错误中,
tempmin的值在初始化之前被使用。