実力判定:Aランク
締め切りが 2017/12/31 10:00 AM なので,その 1 分後に投稿されるように予約
【問題】
1から1,000,000までの整数の範囲で、連続する2値を合計します。
2値の合計が、整数Nの倍数になる組み合わせを、数えてください。
ただし、整数Nは、2≦N≦1,000 の範囲とします。
例
整数Nが11の場合、「5, 6(合計は11)」、「16,17(合計は33)」……という組み合わせが、整数Nの倍数になります。
また、連続する2値の最小は「1, 2(合計は3)」、最大は、「999999, 1000000(合計は1999999)」になります。
【入力】
標準入力から、複数行のデータが与えられます。1行のデータが、1つの整数Nになります。
【出力】
1行ずつ処理を行ない、その答えを1行ごと標準出力に出力します。
【入出力サンプル】
Input
307
456
545
165
Output
3257
0
1835
6061
=======================
1000行のテストデータがあるんだけど,その中に同じ値が複数個ある。
テストデータの準備としては,漫然としており,だらしない。
期待される結果と違うといわれたのであるが,テストデータがあまりにも多いので,どれが間違えているのか(あるいは,プログラムに不備があるのか)なかなかわからなかった。
結果としては,答えが 200000 となる場合に R では 2e+5 と出力されることがあるのが原因であった(options(scipen=100) とでもしておけばよいのだが)。
f = function(N) {
invisible(sapply(N, function(n) {
if (n %% 2 == 0) {
m = 0
} else {
m = (1999999 %/% n + 1) %/% 2
}
options(scipen=100)
cat(m, "\n", sep="")
}))
}
f(scan(file("stdin", "r")))
より簡単に書くとこうなる。
f = function(N) {
options(scipen=100)
cat((ifelse(N %% 2, 1999999, 0) %/% N + 1) %/% 2, sep="\n")
}
f(scan(file("stdin", "r")))
最新の画像[もっと見る]
-
算額(その2059) 43分前
-
算額(その2057) 4時間前
-
算額(その2056) 19時間前
-
算額(その2055) 19時間前
-
算額(その2054) 1日前
-
算額(その2053) 1日前
-
算額(その2052) 1日前
-
算額(その2051) 1日前
-
算額(その2051) 1日前
-
算額(その2050) 2日前
※コメント投稿者のブログIDはブログ作成者のみに通知されます