前提・実現したいこと
6 人で50m走を走ったときの各コースのタイムと順位を配列に格納し、順位順にコースとタイムを表示するプログラムを作成しなさい。
1コース 6.8秒 2位
2コース 6.5秒 1位
3コース 7.9秒 6位
4コース 7.2秒 4位
5コース 7.1秒 3位
6コース 7.6秒 5位
というのを順位順に並びなおしたいです。
なお、それぞれの配列は変えずにそのまま使用したいです。
発生している問題・エラーメッセージ
上手く並べられません。
<実行結果>
1コース 6.8秒 2位
2コース 6.5秒 1位
3コース 7.9秒 6位
4コース 7.2秒 4位
5コース 7.1秒 3位
6コース 7.6秒 5位
1位 1コース 6.5秒
2位 2コース 6.0秒
3位 3コース 7.1秒
4位 4コース 7.0秒
5位 5コース 7.0秒
6位 6コース 7.6秒
このようになります。
例えばtimeという配列とjyuniという配列を関連づける、といったことは可能なのでしょうか?
下のソースコードを見てもらえばわかるんですが、j[6]を順位順に並べ替えても、
c6とt6を順位順に並べられません。
該当のソースコード
c
1#include<stdio.h> 2int main() 3{ 4 float t[6] = {6.8, 6.5, 7.9, 7.2, 7.1, 7.6}; 5 int j[6] = {2, 1, 6, 4, 3, 5}; 6 int c[6] = {1, 2, 3, 4, 5, 6}; 7 int i, k, work, work2; 8 9 //配列表示 10 for(i=0; i<6; i++){ 11 printf("%dコース %.1f秒 %d位\n", c[i], t[i], j[i]); 12 } 13 14 //並び替え 15 for(i=0; i<=3; i++){ 16 for(k=5; k>=i+1; k--){ 17 if(j[k]<j[k-1]){ 18 work = j[k]; 19 j[k] = j[k-1]; 20 j[k-1] = work; 21 } 22 } 23 } 24 printf("\n"); 25 26 for(i=0; i<=3; i++){ 27 for(k=i+1; k<=5; k++){ 28 if(t[i]>t[k]){ 29 work2 = t[i]; 30 t[i] = t[k]; 31 t[k] = work2; 32 } 33 } 34 } 35 printf("\n"); 36 37 //結果表示 38 for(i=0; i<6; i++){ 39 printf("%d位 %dコース %.1f秒\n", j[i], c[i], t[i]); 40 } 41 printf("\n"); 42 return 0; 43} 44
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/02 22:37
2018/05/03 15:05
2018/05/03 15:15