- 締切済み
パズルのプログラム
例えば三ケタの123とし、大きい順に並べて321小さい順に並べて123とします.そして321-123=198となりまた大小で並べて981-198と計算していきます。そして何回かすると同じ数がずっと出てくるのですが、それを何回行うかを求めるプログラムを教えて欲しいです。なお三ケタの100~999までとし、使う言語をc言語としてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 7o8
- ベストアンサー率55% (5/9)
こんな感じでつくればいいかと。 #salsberryさんみたいに効率化はしていません..... (1).指定された数値をABCという変数に格納する。 (2).100の位はA、10の位はB、1の位はCに格納すると定義。 A=ABC/100; B=(ABC-A*100)/10; C=ABC-A*100-B*10 (3).変数CBAにABCの逆の並びの数値を入れる。 CBA=C*100+B*10+A; (4).ABCとCBAの差分を計算。結果を+になるようにする。 (5).前に実行した結果と比べてみる。ABCにその結果を代入、(2)へ。 一緒だったら繰り返し回数を表示して終了 C云々、って問題じゃないですよ。 宿題を教えてください、なら、その授業をとる意味あるのかをまず考えてください。 で、勉強したいのであれば、ここではなく、直接人に聞いてください。 ここではいくつかのポイントについてアドバイスは可能ですが、 それ以上は無理です。 教えるのは好きなんですけど、ここではさすがに無理があります。(^^;;;;
- salsberry
- ベストアンサー率69% (495/711)
最初の値が100だった場合、100-001=099 → 990-099=891 → … のように0を補って計算すればいいのでしょうか? また、質問文中にある981-198は981-189の誤りでしょうか? 各桁の数字を A, B, C (A≧B≧C) とすると、ABC-CBAの値は ・A=Cならば 000 ・A>Cならば D9E (D+E=9) のいずれかになります。 前者の場合はそこで終わり。 後者の場合、D>Eとして次の計算は9DE-ED9=F9Gとなり、F=8-E、G=1E-9=E+1、F+G=9が成り立ちます。 DとEがどんな値でも必ず954-459=495という計算に収束するので、初回の引き算の結果だけを見れば答えは分かりますね。
- asuncion
- ベストアンサー率33% (2127/6289)
>それを何回行うかを求めるプログラムを教えて欲しい ここの話と >大まかな流れを教えて欲しい ここの話は同じ意味ですか? プログラムそのものと大まかな流れとでは、話が全く別です。 で、プログラムがおわかりにならない質問者さんとしては、 プログラムそのものあるいは大まかな流れに関する回答が届いた後、 何をなさりたいのですか? どうも、目的がよくわかりません。
- asuncion
- ベストアンサー率33% (2127/6289)
>それを何回行うかを求めるプログラムを教えて欲しいです。 自分でプログラムを作りたいのでヒントがほしい、とか、 自分でここまでは作ったけどここから先がわからない、とかいう話ではないのですか?
補足
まったくプログラムがわからないので大まかな流れを教えて欲しいのですが…