No.3ベストアンサー
- 回答日時:
>while ? do という形を使っても、おなじようなことができますでしょうか?
以下のようにしてください。
----------------------------
print "input=>"
data = gets
num = data.to_i
while num > 1 do
p num
if num%2 == 0
num = num / 2
else
num = (num + 1) / 2
end
end
p num
----------------------------
実行結果
-------------------------
input=>5600
5600
2800
1400
700
350
175
88
44
22
11
6
3
2
1
---------------------------------
No.2
- 回答日時:
以下のようにしてください。
-------------------------------
print "input=>"
data = gets
num = data.to_i
while true
p num
break if num <= 1
if num%2 == 0
num = num / 2
else
num = (num + 1) / 2
end
end
--------------------------------
実行結果は以下のとおり。
input=>100
100
50
25
13
7
4
2
1
----------------------------------
尚、whileを使わずに再帰処理で行なう場合は以下のようにします。
----------------------------------------
def shori(num)
p num
return if num <= 1
if num%2 == 0
num = num / 2
else
num = (num + 1) / 2
end
shori(num)
end
print "input=>"
data = gets
shori(data.to_i)
-----------------------------------------
この回答への補足
ありがとうございます。驚きです。参考書よりも参考になります。
while ? do という形を使っても、おなじようなことができますでしょうか? もし差し支えなければ教えてください。よろしくお願いします。
No.1
- 回答日時:
偶数を2で割る
処理
奇数なら+1する
処理
(偶数になっているので)2で割る
...
というループなのでしょうか?
偶数だったら2で割る/奇数なら+1して2で割る
処理
というループなのでしょうか?
また、処理の最初は5600なのでしょうか?2で割った2800なのでしょうか?
1で止まるとは、1の処理をして終わるという意味なのか、1の処理はしないで終わるという意味なのか、どちらでしょう?
これらがはっきりしないと、プログラムは作れません。
はっきりしたら、処理と計算とループ判定を、仕様を満すように並べます。
テクニックとしては、
偶数だったら2で割る/奇数なら+1して2で割る
処理
の場合、整数/整数=整数(端数切り捨て)となることを利用して
num = (num+1)/2
と1つの式に書ける、というものくらいです。
この回答への補足
言葉足らずで申しわけありませんでした。とても感謝しています。
偶数だったら2で割り、奇数なら+1して2で割る処理で最終的には、2÷2 で 1になった所で終わるという処理です。その経過を順番に guts 又は print で 5800~ 1 になるまで表示したいのですけど、難しくて分かりませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 助けてください‼︎ javascriptで質問があります。 配列を定義して、 29342、45342 3 2022/06/26 22:06
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- 数学 整数問題についてですが、 「正の整数aに対してa²を4で割ったときの余りを求めよ」という問題で、答え 12 2023/08/28 15:03
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# C言語のwhileを含む関数について 2 2022/12/16 12:28
- 数学 1から9の数字を書いたカードが一枚ずつある。これらの9枚のカードから同時に2枚を取り出し、数字の大き 5 2022/04/25 15:38
- 高校 数学1 6 2022/07/02 10:54
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- 数学 命題 nが合成数ならば、√n以下の素数pが存在し、pはnを割り切る の対偶を考える際、nが合成数なら 1 2023/05/23 00:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
フォルダのアクセス権確認について
-
private subモジュールを他のモ...
-
マクロで、次のコードへ行く前...
-
Word VBA。各マクロの間に待ち...
-
シェルスクリプトでファイル内...
-
特定のファイルを他のプロセス...
-
【VBA】エラー処理で別プロシー...
-
シグナル 6(SIGABRT)とは?
-
Excel VBA セルの名前があるか...
-
For ~ Next文
-
途中で処理を中断させたい (ア...
-
ドリブン??
-
【C#】Page_Loadさせない方法に...
-
ExcelのVBAで、選択したファイ...
-
Functionで戻り値を複数返す方法
-
特定の名前のオートシェイプの...
-
VB6で定時刻処理
-
VBとSQLServerのセッションが切...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
シグナル 6(SIGABRT)とは?
-
Functionで戻り値を複数返す方法
-
特定の名前のオートシェイプの...
-
ExcelのVBAで、選択したファイ...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
VBA 複数の行を高速で削除する...
-
Excel VBA セルの名前があるか...
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
シェルスクリプトでファイル内...
-
【Vb.net】プリンタジョブの取得
-
vbaのエラー対応(実行時エラー...
-
VBAでBook読み込み時の非表示方...
おすすめ情報