0

我无法在二维整数数组中打印最大值的位置。即元素数组[33][2] 的值为500 是最大值,其中[33] 表示第33 周,[2] 表示第2 天。我想 printf (“最大值为 500,在第 : X 天找到”)以及 printf (“最大的一周是 : Y”)(对于第一周,它是连续 7 天之内的最大总和达到的一周)

此外,当我尝试对整数的二维数组进行排序时,排序后的版本的打印没有排序......我正在使用带 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;
    }}}

我搞不清楚了...

4

3 回答 3

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].

于 2012-12-09T21:48:24.797 回答
1

只是一些随机的想法:索引总是从 0 开始。不需要排序来找到最大的数字。您是否考虑过几天或几周可能具有相同值的可能性?如果您对数组进行排序,您希望如何知道数据从哪里开始?

祝你好运!

于 2012-12-09T22:02:15.607 回答
0

在冒泡排序中,您必须不断循环整个数组,直到您不必在特定循环上交换任何元素。您只循环一次,除非数组几乎开始排序,否则它将不起作用。

[i][j+1]此外,在for 循环完成之前,您不会读取元素[i][j],因此您将[i][j]与存储在[i][j+1]. 在对它们进行排序之前阅读所有元素!

于 2012-12-09T21:51:14.357 回答