2014年10月7日火曜日

ONBOARDING

迫りくる敵を撃ち落とすゲーム。

Console.WriteLine("ターゲット名");

で攻撃。

標準入力からのデータを
Console.ReadLine().Split(' ')
で取ってくる部分などは、最初から組み込まれている。
そこで得られた次の変数をどう使うかがキーポイントになります。

String enemy //敵の名前
int dist    // 距離

毎回、最も近い敵に対して攻撃をしないと負けです。よって複数いる敵のうち、最も近いものを検索するコードを書かないといけません。


回答例

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

class Player
{
    static void Main(String[] args)
    {
        string[] inputs;

        // game loop
        while (true)
        {
            int count = int.Parse(Console.ReadLine()); // The number of current enemy ships within range
            int minDist = 0; //最短距離。とりあえず仮でゼロ
            string target = ""; // 攻撃対象の敵の名前
            for (int i = 0; i < count; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                String enemy = inputs[0]; // 敵の名前
                int dist = int.Parse(inputs[1]); // 敵までの距離
                if(minDist == 0 || minDist > dist){ // 最短距離を求める。配列の一番目の場合と、いままでの距離より短い場合は更新する
                    minDist = dist; //最短距離を更新
                    target = enemy; //攻撃対象の敵の名前
                }
                Console.Error.WriteLine("enemy:" + enemy + " dist:" + dist + " minDist:" + minDist); //デバッグ用
            }
            Console.WriteLine(target); //攻撃実行
        }
    }
}

所感

変数、型(int, String)、if、条件式を理解していれば解ける問題です。

0 件のコメント:

コメントを投稿