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問しかないんですね。これでおしまいです。

にほんブログ村 IT技術ブログへ
1票ポチッと押して下さい♪このブログのランキングが少し上がります。