我在以2d整数数组打印最大位置时遇到问题。即值为500的元素数组[33] [2]最大,其中[33]表示第33周,[2]表示第2天。我想printf(“最大值是500,在天发现:X”)以及printf(“最大的一周是:Y”)(对于第一周,它是连续七天内的最大总和)已实现的一周)
此外,当我尝试对整数的2D数组进行排序时,排序版本的打印未排序... 我正在使用带有temp的冒泡排序:
for (i=0; i<100;i++){
for(j=0;j<7;j++){
fscanf(filetoreadfrom,"%d\n",&array[i][j]);
if(array[i][j] < array[i][j+1]){
temp=array[i][j];
array[i][j]=array[i][j+1];
array[i][j+1]=temp;
}}}
我迷失了......
答案 0 :(得分:2)
在阅读所有数据之前,您正在对数据进行排序。首先阅读数据:
for (i=0; i<100;i++){
for(j=0;j<7;j++){
fscanf(filetoreadfrom,"%d\n",&array[i][j]);
}
}
然后进行排序:
for (i=0; i<100;i++){
for(j=0;j<7;j++){
if(array[i][j] < array[i][j+1]){
temp=array[i][j];
array[i][j]=array[i][j+1];
array[i][j+1]=temp;
}
}
}
您的排序算法不正确。例如,当j
为6时,语句array[i][j]=array[i][j+1];
会尝试阅读array[i][7]
。
答案 1 :(得分:1)
只是一些随意的想法: 索引始终以0开头。 没有必要排序找到最大的数字。 您是否考虑过几天或几周可能具有相同价值的可能性? 如果对数组进行排序,您希望如何知道数据的开始位置?
祝你好运!答案 2 :(得分:0)
在冒泡排序中,您必须在整个数组上循环,直到您不必交换特定循环上的任何元素。你只循环一次,这将无法工作,除非数组几乎按照开始排序。
此外,在完成[i][j+1]
的循环之前,您不会在元素[i][j]
中读取,因此您将[i][j]
与[i][j+1]
中存储的任何垃圾进行比较}。在排序之前,请读入所有元素!