###実現したいこと
2番目に小さい値とその添え字を出力したい。
※全部異なる値が入力されるとします。
###問題点
いまのプログラムだと下記の実行結果になります。
10から降順にまた昇順にならべるとうまくいきません。
10個の正整数を入力します 1番目 10 min1=10 min2=10 2番目 9 min1=9 min2=10 3番目 8 min1=8 min2=10 4番目 7 min1=7 min2=10 5番目 6 min1=6 min2=10 6番目 5 min1=5 min2=10 7番目 4 min1=4 min2=10 8番目 3 min1=3 min2=10 9番目 2 min1=2 min2=10 10番目 1 min1=1 min2=10 2番目に小さい数は0番目に入力された10です
ランダムだとうまくいきます。
10個の正整数を入力します 1番目 4 min1=4 min2=4 2番目 7 min1=4 min2=4 3番目 2 min1=2 min2=4 4番目 9 5番目 0 min1=0 min2=4 6番目 5 min1=0 min2=4 7番目 1 ans=7 min1=0 min2=1 8番目 3 min1=0 min2=1 9番目 8 min1=0 min2=1 10番目 10 min1=0 min2=1 2番目に小さい数は7番目に入力された1です
###コード
C
1#include<stdio.h> 2int main(void) 3{ 4 int i,data,maxans; 5 int min1=0; //1番小さな値 6 int min2=0; //2番目に小さな値 7 int ans=0; 8 //添え字を保存しておく 9 10 printf("10個の正整数を入力します\n"); 11 for(i=0;i<10;i++){ 12 printf("%d番目 ",i+1); 13 scanf("%d",&data); 14 if(i==0){ 15 min1=data; 16 min2=min1; 17 }else if(min2>data){ 18 if(min1<data){ 19 min2=data; 20 ans=i+1; 21 printf("ans=%d\n",ans); 22 } 23 if(min1>data){ 24 min1=data; 25 } 26 //ans=i+1; 27 //printf("ans=%d\n",ans); 28 } 29 printf("min1=%d min2=%d\n",min1,min2); 30 } 31 32 printf("2番目に小さい数は%d番目に入力された%dです\n",ans,min2); 33 return 0; 34}
回答1件
あなたの回答
tips
プレビュー