fork download
  1. #include <stdio.h>
  2. /*
  3.   1. n が偶数なら n → n / 2
  4.   2. n が奇数なら n → 3n + 1
  5.  
  6.   この操作を繰り返し,
  7.   1 に到達するまでの回数を K(n) とする。
  8.  
  9.   問題文から関数のKを使用
  10.   整数を返すint
  11. */
  12. int K(int n) {
  13. // 操作回数を保存する変数 最初は何もやっていないので0
  14. int count = 0;
  15.  
  16. // n が 1 になるまで繰り返す 操作を繰り返すからwhile文を使用
  17. while (n != 1) {
  18.  
  19. // n が偶数の場合
  20. if (n % 2 == 0) {
  21. n = n / 2;
  22. }
  23.  
  24. // n が奇数の場合
  25. else {
  26. n = 3 * n + 1;
  27. }
  28.  
  29. // 操作を1回行ったので回数を増やす
  30. count++;
  31. }
  32. // 求めた操作回数を返す
  33.  
  34. return count;
  35. }
  36.  
  37. int main(void) {
  38.  
  39. int n;
  40. // 文字を画面に表示する
  41. printf(" n\tK(n)\n");
  42. // タイトルとデータを見やすく区切るための線
  43. printf("----------------\n");
  44.  
  45. /*
  46.   n = 1 から 100 までについて
  47.   K(n) を計算して表示する
  48.   */
  49. for (n = 1; n <= 100; n++) {
  50.  
  51. printf("%3d\t%3d\n", n, K(n));
  52. }
  53.  
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0s 5308KB
stdin
3
stdout
 n	K(n)
----------------
  1	  0
  2	  1
  3	  7
  4	  2
  5	  5
  6	  8
  7	 16
  8	  3
  9	 19
 10	  6
 11	 14
 12	  9
 13	  9
 14	 17
 15	 17
 16	  4
 17	 12
 18	 20
 19	 20
 20	  7
 21	  7
 22	 15
 23	 15
 24	 10
 25	 23
 26	 10
 27	111
 28	 18
 29	 18
 30	 18
 31	106
 32	  5
 33	 26
 34	 13
 35	 13
 36	 21
 37	 21
 38	 21
 39	 34
 40	  8
 41	109
 42	  8
 43	 29
 44	 16
 45	 16
 46	 16
 47	104
 48	 11
 49	 24
 50	 24
 51	 24
 52	 11
 53	 11
 54	112
 55	112
 56	 19
 57	 32
 58	 19
 59	 32
 60	 19
 61	 19
 62	107
 63	107
 64	  6
 65	 27
 66	 27
 67	 27
 68	 14
 69	 14
 70	 14
 71	102
 72	 22
 73	115
 74	 22
 75	 14
 76	 22
 77	 22
 78	 35
 79	 35
 80	  9
 81	 22
 82	110
 83	110
 84	  9
 85	  9
 86	 30
 87	 30
 88	 17
 89	 30
 90	 17
 91	 92
 92	 17
 93	 17
 94	105
 95	105
 96	 12
 97	118
 98	 25
 99	 25
100	 25