質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

862閲覧

偶数と奇数に関するプログラムを立てたい

riui

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2023/01/17 10:23

編集2023/01/17 14:51

前提

//2以上の正の整数nを変換する次のような操作を考える.

//  操作A nが偶数の場合nを2で割る.
//  操作B nが奇数の場合nに3をかけて1を足す.

//「nの初期値のとり方にかかわりなく、
この操作を繰り返すとnは最終的に1に到達する」という仮説に対して 100以下の整数nが, この命題を満たすことを確認する

実現したいこと

nの値と変換操作の回数(操作Aと操作Bを行った回数の和)を導出したい

コードと問題

main.c

1#include <stdio.h> 2 3int main(){ 4 int k,K=100,i,n,j=0,l; 5 for(k=1;k<=K;k++){ 6 n=【ア】; 7 printf("%d",n); 8 for(i=1;【イ】!=1;i++){ 9 if(【ウ】%【エ】==0) n=n/【オ】; 10 else n=n*【カ】+【キ】; 11 printf("->%d",n); 12 } 13 printf("\n"); 14 } 15 return(0); 16} 17 18//完成したプログラムを改良すると、 19「1に到達するまでに要する変換プロセスの回数が最も大きい」 20100以下の整数nを求めることができる。 21//このnの値は【ク】であり,この時の変換操作の回数 22(操作Aと操作Bを行った回数の和)は【ケ】である. 23

試したこと

ア 2*k
イ 100
ウ n
エ 2
オ 2
カ 3
キ 1

結果

2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198 200

何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pig_vba

2023/01/17 10:34

さすがにアは分かってください…
y_waiwai

2023/01/17 10:57

質問は編集できます 無駄に質問建てないで追記修正しましょう
riui

2023/01/17 11:14

すみません、、 ありがとうございます、、
pig_vba

2023/01/17 11:42

kを使ってないことを思い出しましょう。必然的にnに入れるべき文字がわかるはずです。
riui

2023/01/17 13:10

ありがとうございます。 ア = 2*k として考えていきます。
pig_vba

2023/01/18 00:23

複雑に考えなくてもn=kでいいのよ… n=1の時は下のfor(i=1;n!=1;i++)ではじかれるから…
fana

2023/01/18 01:49

どうでもいいことかもしれませんが,「プログラムを立てる」って普通に使う言葉ですか?
guest

回答1

0

もうテスト終わってると思うので自己採点できるように改良版側のサンプルコード置いておきますね。(少し弄りました)

C

1#include <stdio.h> 2int main(void){ 3 4 int k,K=100,i,n; 5 6 for(k=1;k<=K;k++){ 7 8 n=k; 9 cnt=0; 10 printf("%d",n); 11 12 for(i=1;n!=1;i++){ 13 if(n%2==0) n=n/2; 14 else n=n*3+1; 15 } 16 printf(":%d\n",i); 17 } 18 return(0); 19 20} 21

上記のコードを走らせれば、n=97の時の変換回数118回が最大であることが分かります。

投稿2023/01/18 05:04

編集2023/01/18 06:09
pig_vba

総合スコア808

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2023/01/18 05:50 編集

i と cnt は統合(というかどちらか一方だけに)したい感じ. (あと「// Your code here!」なるやつは消した方がよいのでは.)
pig_vba

2023/01/18 06:08

ほんまやiあるやん(見てなかった)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問