![](/img/trans.png)
[英]C : Find max value in array using 2 pointers (one for array, one for maximum)
[英]C - Find maximum value in array
我正在这里的一个程序上工作,正在访问文件输入并遍历文件中的值数组。 但是,它没有正确计算最大值。 有什么帮助吗?
#include <stdio.h>
int main() {
int header, i, j, cur_val, auction[50], sum = 0;
int max = 0;
FILE * ifp;
ifp = fopen("input.txt", "r");
fscanf(ifp, "%d", &header);
for (i = 0; i < header; i++) {
fscanf(ifp, "%d", &cur_val);
printf("%d\n", cur_val);
for (j = 0; j < cur_val; j++) {
fscanf(ifp, "%d", &auction[j]);
printf("%d\n", auction[j]);
max = auction[0];
if (auction[j] > max) {
max = auction[j];
}
}//end j loop
printf("Max: %d\n", max);
printf("\n");
//printf("Auction %d was sold for $%.2f!\n", i+1, );
//sum+=max;
}//end i loop
fclose(ifp);
return 0;
}
这是文件输入:
5
4
100 500 250 300
1
700
3
300 150 175
2
920 680
8
20 10 15 25 50 30 19 23
打印到控制台的最大值如下:
300 700 300 920 23
中间3个作品,但不是第一个和最后一个。 知道为什么吗?
您将max设置为auction [0]; 在每个循环中,消除您以前的最大值。
在循环内仅初始化一次最大值,或者在循环外初始化最大值(在读取第一个值之后)。
您在列表中找到比拍卖更大的最后一个数字[0]
线性 max_value
循环的规范实现是这样的
给定
max_value = MIN_N for i in 1...N if values[i] > max_value max_value = values[i]
现在,您可以将所有值读入一个数组(我在上面将其称为values
),也可以一次读入一个值。
将其转换为C,并在此处假设一个数组以简化操作:
int max_value = MIN_N;
for (int i = 0; i < N; ++i) {
if (values[i] > max_value)
max_value = values[i];
}
printf("Max %d\n", max_value);
对于您的实际分配,您需要将其包装在一个循环中以处理所有测试用例。 为了避免内存管理等需求,我可能会读数字。
FILE *f = open_input_file(); // could return stdin for testing
int T = read_an_integer(f);
for (int t = 0; t < T; +=t) {
int N = read_an_integer(f);
int max_value = MIN_N;
if (N <= 0) continue;
for (int n = 0; n < N; ++n) {
int v = read_an_integer(f);
if (v > max_value)
max_value = v;
}
printf("Max %d\n", max_value);
}
close_my_file(f);
我将保留文件处理和I / O的功能-但请确保您处理所有错误情况(在这种情况下,调用exit(-1)
可能就足够了)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.