ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:takuya0305 パズルのプログラム
困り度:
  • すぐに回答を!
例えば三ケタの123とし、大きい順に並べて321小さい順に並べて123とします.そして321−123=198となりまた大小で並べて981−198と計算していきます。そして何回かすると同じ数がずっと出てくるのですが、それを何回行うかを求めるプログラムを教えて欲しいです。なお三ケタの100〜999までとし、使う言語をc言語としてください。
質問投稿日時:09/10/29 20:44
質問番号:5406870
最新から表示回答順に表示

回答

 

回答者:7o8 こんな感じでつくればいいかと。
#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云々、って問題じゃないですよ。
宿題を教えてください、なら、その授業をとる意味あるのかをまず考えてください。
で、勉強したいのであれば、ここではなく、直接人に聞いてください。
ここではいくつかのポイントについてアドバイスは可能ですが、
それ以上は無理です。
教えるのは好きなんですけど、ここではさすがに無理があります。(^^;;;;
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:09/10/31 05:38
回答番号:No.4
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:salsberry 最初の値が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という計算に収束するので、初回の引き算の結果だけを見れば答えは分かりますね。
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:09/10/30 02:26
回答番号:No.3
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:asuncion >それを何回行うかを求めるプログラムを教えて欲しい

ここの話と

>大まかな流れを教えて欲しい

ここの話は同じ意味ですか?
プログラムそのものと大まかな流れとでは、話が全く別です。
で、プログラムがおわかりにならない質問者さんとしては、
プログラムそのものあるいは大まかな流れに関する回答が届いた後、
何をなさりたいのですか?
どうも、目的がよくわかりません。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/10/29 21:43
回答番号:No.2
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:asuncion >それを何回行うかを求めるプログラムを教えて欲しいです。

自分でプログラムを作りたいのでヒントがほしい、とか、
自分でここまでは作ったけどここから先がわからない、とかいう話ではないのですか?
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/10/29 21:16
回答番号:No.1
この回答への補足まったくプログラムがわからないので大まかな流れを教えて欲しいのですが…
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示