こんにちは
あとは
/*nの各くらいをバラバラにする部分*/
/*配列aの値を大きい順に並べる部分*/
/*最大値をmaxへ、最小値をminへ、その差をnに代入する部分*/
/*ここまでをnがMAGICの値と等しくなるまで繰り返す*/
を実装できればいいわけですね。
/*nの各くらいをバラバラにする部分*/
例えば n=1234 だったとして、
{1,2,3,4} を取り出す方法を考えてみましょう。
一の位を取り出すのは簡単です。 10 で割ったあまりになります。
n mod 10 = 4
十の位を取り出すにはどうすればいいでしょうか?
一の位を取り出す方法はわかったので、 n を 123 にしてしまえばできそうです。
1234 を 123にするにはどうすればいいでしょうか?
C言語なら 10 で割るだけで 123 になります。(int型は小数点以下を切り捨てるから)
あとはこれを繰り返せば各位を取り出せそうです。
取り出した各位の値を 配列a に代入します。
代入する時点では順番はバラバラでも構いません。
n=1423 だったら a[4]={1,4,2,3} でも a[4]={3,2,4,1} でも大丈夫です。
/*配列aの値を大きい順に並べる部分*/
a[4]={1,4,2,3} だったとして、大きい順に並べ替えて a[4]={4,3,2,1} にしたいです。
大きい順に並べる方法(ソート)はいくつか種類がありますが、
今回は選択ソート(であってるかな?)を使います。
まず a[0](=1) と a[1](=4) を比較します。
a[1] の方が大きいので a[0] と a[1] を入れ替えます。(a[4]={4,1,2,3})
次に a[1](=1) と a[2](=2) を比較します。
a[2] の方が大きいので a[1] と a[2] を入れ替えます。(a[4]={4,2,1,3})
次に a[2](=1) と a[3](=2) を比較します。
a[3] の方が大きいので a[2] と a[3] を入れ替えます。(a[4]={4,2,3,1})
これを何度も繰り返すと最終的に a[4]={4,3,2,1} になります。
/*最大値をmaxへ、最小値をminへ、その差をnに代入する部分*/
最大値は 4321 、最小値は 1234 になりそうです。
これは 配列a の値を先頭から読みだした値、後方から読みだした値と等しくなりそうです。
{4,3,2,1} から 4321 に変換するにはどうすればいいでしょう?
めんどくさくなってきたので自分で考えてみてください^p^
/*ここまでをnがMAGICの値と等しくなるまで繰り返す*/
while文で行けそうですね。
ところで、No.3のdo~while分の書き方は間違っている気がします。
コード:
do { 処理 }while( 判定 );
が正しいとおもいます^^
ふぁいと^p^