まず【10個の整数が与えられたとき,その中の最大値を見つける処理】は作れるものと仮定する.
ここでは説明を簡単にするため,以下のような関数として実装されるとしよう.
コード:
//引数Valuesには要素数がArraySize個の配列の先頭を指定してね.
//最大値の要素のindexを返すよ.
int IndexOfMaxValue( int *Values, size_t ArraySize )
{ ... }
さて,これができれば,話は簡単.
入力された10個の整数を,配列に格納し,
IndexOfMaxValue( 配列, 10 );
とすれば,10個の整数のうち最大値のindexが得られるのだから,まずはその要素の値を出力すればいい.
次は残り9個のうちの最大値を出力する必要があるが,これは
配列の{先ほど見つけた最大値位置の要素 と 10番目の位置の要素}の値を交換してしまえば,
IndexOfMaxValue( 配列, 9 );
とすることで,
「残りの9個のうちの最大値」として「元々の10個の整数のうち,2番目に小さい値」を特定できる.
その値を出力する.
次は残り8個のうちの最大値を出力する必要があるが,これは
配列の{先ほど見つけた最大値位置の要素 と 9番目の位置の要素}の値を交換してしまえば,
IndexOfMaxValue( 配列, 8 );
とすることで,やはり特定できる.
以下同様に繰り返せばよい.