Repeating Cipher [ Codeforces Round #529 (Div. 3) A ]
問題
文字列 s が与えられる。
s の 0,2,5,9,14......n 番目 (ns.length()) を取り出した文字列を出力せよ。
考察
0,2,5,9,14......n は階差数列というらしいです。
この階差数列の一般項は n(n+3)/2 になります。
文字列 s の n(n+3)/2 番目を n=1 から順に取り出すには、ループの条件式を以下のように記述します。
・i*(i+3)/2 < s.length()
コード
void solve (FastScanner in, PrintWriter out) { int n = in.nextInt(); String s = in.next(); StringBuilder sb = new StringBuilder(); for (int i=0; (i*(i+3)/2)<n; i++) { sb.append(s.charAt(i*(i+3)/2)); } out.println(sb); }
感想
ループの条件式を特殊なものにするパターンはほとんど書いたことがなかったので、いい練習になりました。