韓国のすごろく遊びユンノリでは、一回の番に棒(ユッカラ)を少なくとも一回投げる。 投げた結果がユッかモならもう一回投げ、ト・ケ・コルならその番は終わる。 結果は数で書く。 トは 1、ケは 2、コルは 3、ユッは 4、モは 5 で、駒はこの数だけ進む。 一人が何回かの番にわたって投げた結果が、投げた順にすべて与えられる。 一行目に投げた回数 n が、二行目に結果 n 個が空白一つずつで区切って与えられる。 最後の結果は 1、2、3 のどれかなので、最後の番も終わりまで与えられる。 番ごとに、その番に投げた結果をすべて足した値(その番に駒が進むマスの数)を順に一行に一つずつ出力せよ。
入力
1 ≤ n ≤ 1,000。 結果は 1〜5 の整数で、最後の結果は 1、2、3 のどれか
出力
番の数だけの行、各行にその番に進むマスの数
例 1 · stdin
6
4 2 3 5 4 1
stdout
6
3
10
main.py
エラー一覧00F8 ↓ · ⇧F8 ↑
入力(stdin)
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
ほかの言語では?言語別の解答を見る · 8 言語の解答
一回の番は「先に投げて、投げたあとでもう一度投げるか聞く」ループなので do-while がぴったりです:do { t = a[i++]; total += t; } while (t >= 4);。 do-while がある言語は C・C++・Java・C#・JS・TS です。 C・C++・Java・C# は while (…) のあとにセミコロンがないとコンパイルできません。 JS・TS は省いても自動で補われますが、ふつうは書いておきます。 Python と Craykon には do-while がないので、while True:(Craykon 間 (真))で入り、本体のいちばん最後で if t < 4: break(Craykon 抜ける;)として「少なくとも一回」を作ります。 このとき聞く行を足す行より前に置くと、番を終わらせたト・ケ・コルが抜けて、4 2 が 6 ではなく 4 になります。 ふつうの while で書くには一回目をループの外で投げることになりますが、その一回目の結果を足し忘れがちです。 境界にも注意します。 ユッ(4)ももう一回投げるので t >= 4(または t > 3)で、t > 4 や t == 5 と書くとユッで番が終わってしまいます。
Pythonmain.py · 13 行
n = int(input())throws = list(map(int, input().split()))i = 0while i < n: total = 0 # 파이썬에는 do-while이 없다: while True로 들어가 끝에서 물어 "적어도 한 번" 던진다 while True: t = throws[i] i += 1 total += t if t < 4: # 도·개·걸이면 차례가 끝난다(더한 뒤에 묻는다) break print(total)
JavaScriptmain.js · 14 行
const [n, ...throws] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];let i = 0;while (i < n) { let total = 0; let t; // 한 번은 던지고, 윷(4)·모(5)가 나왔으면 다시 던진다 do { t = throws[i++]; total += t; } while (t >= 4); out.push(total);}console.log(out.join("\n"));
TypeScriptmain.ts · 14 行
import { readFileSync } from "node:fs";const [n, ...throws]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];let i = 0;while (i < n) { let total = 0; let t: number; do { t = throws[i++]; total += t; } while (t >= 4); out.push(total);}console.log(out.join("\n"));
JavaMain.java · 22 行
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] throwsList = new int[n]; for (int k = 0; k < n; k++) throwsList[k] = sc.nextInt(); StringBuilder out = new StringBuilder(); int i = 0; while (i < n) { int total = 0; int t; do { t = throwsList[i++]; total += t; } while (t >= 4); // do-while은 세미콜론으로 끝난다 out.append(total).append('\n'); } System.out.print(out); }}
C#Main.cs · 26 行
using System;using System.Linq;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine().Trim()); int[] throws = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); var sb = new StringBuilder(); int i = 0; while (i < n) { int total = 0; int t; do { t = throws[i++]; total += t; } while (t >= 4); sb.Append(total).Append('\n'); } Console.Write(sb); }}
C++main.cpp · 18 行
#include <iostream>#include <vector>int main() { int n; std::cin >> n; std::vector<int> a(n); for (auto &x : a) std::cin >> x; int i = 0; while (i < n) { int total = 0, t; do { t = a[i++]; total += t; } while (t >= 4); std::cout << total << "\n"; }}
Cmain.c · 17 行
#include <stdio.h>int main(void) { int n, a[1000]; scanf("%d", &n); for (int k = 0; k < n; k++) scanf("%d", &a[k]); int i = 0; while (i < n) { int total = 0, t; do { t = a[i++]; total += t; } while (t >= 4); /* 윷(4)·모(5)면 한 번 더 */ printf("%d\n", total); } return 0;}
Craykonmain.cray · 19 行
n = コンソール.行読み().数に();던짐 = コンソール.数読み();i = 0;間 (i < n){ 합 = 0; // 크레이콘에는 do-while이 없다: 동안 (참)으로 들어가 끝에서 물어 그만 間 (真) { t = 던짐[i]; i++; 합 = 합 + t; もし (t < 4) { 抜ける; } } コンソール.書く(합);}