0

整数の2次元配列で最大値の位置を出力するのに問題があります。つまり、値500の要素配列[33] [2]が最大です。ここで、[33]は33週目を示し、[2]は2日目を示します。printf( "最大は500で、日:Xにあります")とprintf( "最大の週は:Y")(1週目は、達成された週)

また、整数の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;
    }}}

迷っています...

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

バブルソートでは、特定のループで要素を交換する必要がなくなるまで、配列全体をループし続ける必要があります。ループは1回だけです。これは、配列が最初からほぼソートされていない限り機能しません。

[i][j+1]また、 forのループが終了するまで要素を読み込まないため、に格納されているガベージと[i][j]比較しています。並べ替える前に、すべての要素を読んでください。[i][j][i][j+1]

于 2012-12-09T21:51:14.357 に答える