fork download
  1. import java.util.Arrays;
  2.  
  3. //プログラミングのお題スレ Part11
  4. //https://m...content-available-to-author-only...h.net/test/read.cgi/tech/1524570314/452
  5.  
  6. //452 名前:デフォルトの名無しさん[] 投稿日:2018/05/16(水) 23:40:38.01 ID:7XX9JZjA
  7. //お題:
  8. //以下のように操作を繰り返して単一リストになったらその要素を返す
  9. //
  10. //[1,2,3,4,5,6,7,8,9]
  11. //-> [5,1,13,2,21,3,29,4]
  12. //-> [16,16,41,1,66,38,91]
  13. //-> [8,8,124,69,33,19]
  14. //(中略)
  15. //-> [4,216]
  16. //-> [2]
  17. //
  18. //テスト例:
  19. //[1,2,3,4,5,6,7,8,9] -> 2
  20. //[9,8,7,6,5,4,3,2,1] -> 2496
  21. //[3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6] -> ?
  22. class Q11_452
  23. {
  24. public static void main(String[] args)
  25. {
  26. solve(1,2,3,4,5,6,7,8,9);
  27. solve(9,8,7,6,5,4,3,2,1);
  28. solve(3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6);
  29. }
  30.  
  31. static void solve(int...is)
  32. {
  33. if (is.length == 0) return;
  34. System.out.print(Arrays.toString(is) + " -> ");
  35.  
  36. // 要素が1個になるまで繰り返す
  37. while (is.length > 1)
  38. {
  39. for(int i = 0; i < is.length - 1; i++)
  40. {
  41. if (is[i] % 2 == 0)
  42. {
  43. // 偶数の場合2で割る
  44. is[i] /= 2;
  45. } else
  46. {
  47. // 奇数の場合3で掛けて右の数値を足す
  48. is[i] = is[i] * 3 + is[i + 1];
  49. }
  50. }
  51.  
  52. // 配列の右端を切り捨てる
  53. is = Arrays.copyOf(is, is.length - 1);
  54. }
  55.  
  56. System.out.println(is[0]);
  57. }
  58. }
  59.  
  60.  
  61.  
  62. // [ 1, 2, 3, 4, 5, 6, 7, 8, 9]
  63. //-> [ 5, 1, 13, 2, 21, 3, 29, 4]
  64. //-> [ 16, 16, 41, 1, 66, 38, 91]
  65. //-> [ 8, 8,124, 69, 33, 19]
  66. //-> [ 4, 4, 62, ??, ??]
  67. //-> [ 2, 2, 31, ??]
  68. //-> [ 1, 1, ??]
  69. //-> [ 4,216]
  70. //-> [ 2]
Success #stdin #stdout 0.06s 27656KB
stdin
Standard input is empty
stdout
[1, 2, 3, 4, 5, 6, 7, 8, 9] -> 2
[9, 8, 7, 6, 5, 4, 3, 2, 1] -> 2496
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6] -> 374447