- 締切済み
【c言語】配列について
現在c言語で下記のようなものを作成したのですが、 最大残金月(maxrestn)を最大12ヶ月分表示させるための方法がどうしても思いつきません。 配列を使って表示させるためにはどうしたらよろしいでしょうか? 13月以上になるのは承知の上なのでスルーでお願いします。 #include <stdio.h> main(){ int m,n,N,income[13],rent=50000,food[13],light[13],outgo[13], rest[13],totalrest=0,maxrest=-100000,maxrestn; printf("何月から始めますか?"); scanf("%d",&m); printf("何ヶ月分のデータを入力しますか?"); scanf("%d",&N); printf("\n\n"); for(n=m; n<N+m; n++){ printf("%d月の収入は?",n); scanf("%d",&income[n]); printf("食費は?"); scanf("%d",&food[n]); printf("光熱費は?"); scanf("%d",&light[n]); outgo[n]=rent+food[n]+light[n]; printf("収入は%d円 支出合計は%d円\n",income[n],outgo[n]); if(income[n]>outgo[n]) printf("%d月は黒字でした\n",n); else if(income[n]==outgo[n]) printf("%d月は収支ちょうどでした\n",n); else printf("%d月は赤字でした\n",n); rest[n]=income[n]-outgo[n]; printf("残金は%d円で\n",rest[n]); totalrest=totalrest+rest[n]; printf("全残金は%d円です\n\n",totalrest); if(rest[n]>=maxrest){ maxrest=rest[n]; maxrestn=n; } } printf("最も残金の多かった月は%d月で、その金額は%d円です",maxrestn,maxrest); return 0; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- motohri
- ベストアンサー率50% (15/30)
今ひとつやりたいことがわからないのですが、もし、 「残金が多い順に、月を並び替えて出したい」 のならば、残高と一緒に月の番号をソートすれば良いでしょう。 次の「+」で示した箇所が追加した行です。 main(){ + int restn[13], i, j, t; // 追加 … if(rest[n]>=maxrest){ maxrest=rest[n]; maxrestn=n; } + restn[n] = n; // 月の番号を配列に入れる } + // 以下並び替える + for (i = m; i< N + m - 1; i++) { + for (j = i + 1; j < N + m; j++) { + if (rest[i] < rest[j]) { + t = rest[i]; + rest[i] = rest[j]; + rest[j] = t; + t = restn[i]; + restn[i] = restn[j]; + restn[j] = t; + } + } + printf("残金%d位の月 %d月、残高%d円\n", i - m + 1, restn[i], rest[i]); + }
補足
ごめんなさい。 説明があやふやでした; 最大残金月を最大12ヶ月分表示とは 12ヶ月すべての残金が同じならば→最後のprintfで「もっとも残金の多かった月は1,2,3…12月で、その金額は○○○です」と表示させたいのです。 さらに言うと、1月から6月までの入力で2,3,5月の残金額が一緒でかつ最大のとき最後のprintfで「もっとも…月は2,3,5月で…」と表示させたいのです。