TopCorder過去問〜初級3
またまた前回と同じ、TopCorderの過去問を日本語で紹介している例のブログ。
10分でコーディング | プログラミングに自信があるやつこい!!
【問題】※詳しくは上記リンクを見てください あなたはこれからトランプを配っていきます。あなたにはトランプを配る人数、そしてトランプが渡されます。 今回はとても簡単なので例題で説明します。 例) 2つの引数がもらえます。 3 "123123123" 最初の3はプレイヤーの人数を示しています。 "123123123" はトランプの並びを示しています。あなたはこのなかのトランプを 配っていかなければなりません。 この場合、あなたのプログラムは {"111","222","333"} を返さなければなりません。 "111"は一番めのプレイヤーが受け取るトランプです。 "222"が2番目のプレイヤーが受け取るトランプです。 "333"が2番目のプレイヤーが受け取るトランプです。
import java.util.*; class Cards { public static String[] deal(int numPlayers, String deck) { char[] deck_arr = deck.toCharArray(); int person_card_count = deck_arr.length / numPlayers; //一人が持つカードの枚数 String[] person_card_arr = new String[numPlayers]; //return値 Arrays.fill(person_card_arr, ""); //初期化 //deck_arrのどこまで見るのか int deck_arr_length = person_card_count * numPlayers; for (int i = 0; i < deck_arr_length; i++) { int person_index = i % numPlayers; //個人に割り振られたNo // その人の所持カードに、割り振られるカードを加えていく person_card_arr[person_index] += String.valueOf(deck_arr[i]); } return person_card_arr; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("人数:"); int numPlayers = scan.nextInt(); System.out.println("カード:"); String deck = scan.next(); //表示出力 for (String s : deal(numPlayers, deck)) { System.out.println(s); } } }
いや〜なかなか10分以内は厳しいですね。1回でもデバッグに引っかかるとアウト。PHPならいけると思うんですが。
ってこのブログ3問しかないんですね。これでおしまいです。