3
1

paiza×Qiitaコラボキャンペーン
「キャンペーン対象問題を解いて、書いたコードや感想をQiitaに投稿しよう!」
に参加してみました!

お菓子の詰め合わせ

苦手なLINQをなるべく使うようにしました。

using System;
using System.Collections;
using System.ComponentModel.Design.Serialization;
using System.Security.Cryptography.X509Certificates;

namespace izoffice
{
    class Program
    {
        //お菓子の最大個数
        private static readonly int OKASHI_MAX = 20;
        //制限金額最大値
        private static readonly int SEIGEN_MAX = 5000;


        static void Main()
        {
            string[] stArrayData = Console.ReadLine().Trim().Split(' ');
            //お菓子の個数
            var N = int.Parse(stArrayData[0]);
            List<RecordClass> recordClassList = new List<RecordClass>();
            //制限金額
            int seigenKingaku = int.Parse(stArrayData[1]);

            if (N >= OKASHI_MAX)
            {
                //お菓子を最大個数以上入力していないか確認
                Console.WriteLine("お菓子は20個までです。");
                return;

            }
            if (seigenKingaku >= SEIGEN_MAX)
            {
                //制限値以上のお菓子の値段を入力していないか確認
                Console.WriteLine("お菓子は5000円までです。");
                return;

            }
            if (seigenKingaku < 1)
            {
                //お菓子の金額を0円に設定していないか確認
                Console.WriteLine("金額は1円以上を入力してください。");
                return;

            }

            //N行のお菓子の値段を取得する
            for (var i = 0; i < N; i++)
            {
                RecordClass record = new RecordClass();
                int nedan = int.Parse(Console.ReadLine().Trim());
                if (nedan < 1)
                {
                    //0円お菓子を入力していないか確認
                    Console.WriteLine("お菓子の金額は1円以上を入力してください。");
                    return;

                }
                else if (nedan > SEIGEN_MAX)
                {
                    //制限金額以上入力していないか確認
                    Console.WriteLine("お菓子の金額は5000円未満を入力してください。");
                    return;

                }
                else
                {
                    record.Score = nedan;

                }
                recordClassList.Add(record);

            }
            int otsuri = 0;
            //購入したいお菓子の合計値を求める
            int sum = recordClassList.Sum(record => record.Score);

            foreach (RecordClass record in recordClassList)
            {

                if (sum > seigenKingaku)
                {
                    //制限金額を超えている場合
                    int min = recordClassList.Min(record => record.Score);
                    //欲しいお菓子の合計から一番安いお菓子の値段の差を求める
                    sum = sum - min;

                    List<RecordClass> copyList = new List<RecordClass>();
                    RecordClass copy = new RecordClass();
                    copy.Score = min;
                    copyList.Add(copy);

                    //お菓子の合計から最小の値段のお菓子を削除する
                    recordClassList.Remove(copy);

                }
                else if (sum <= seigenKingaku)
                {
                    //制限金額以内
                    otsuri = seigenKingaku - sum;

                }
            }

            Console.WriteLine("お菓子の合計 = {0}, おつり={1} ", sum, otsuri);
        }
    }

    /// <summary>
    /// お菓子の値段を記録するクラス
    /// </summary>
    public class RecordClass
    {
        public int Score { get; set; }

    }


}

おわりに

おもしろそうなキャンペーンが実施されていたので参加してみました!
プログラミングを勉強中の方の参考になればと思います!

今回のプログラムは「C#」歴の長い社員に作成を依頼しました!
株式会社アイズには様々なキャリアを積んだ社員が在籍しています。
少しでも気になった方は、採用情報はこちらから!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1