トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
第2回 CodeIQプロコン 2問目 彼魚らの衣装の値段は?
■■■問題■■■
タイやヒラメのような人たちの人数Nが与えられます。
彼魚らの衣装には、固有の番号1からNが刺繍されています。
衣装のベースは1着あたり10000円で、
番号の刺繍に使われている真珠の個数によって金額は異なります。
0・・・真珠24個
1・・・真珠 9個
2・・・真珠21個
3・・・真珠21個
4・・・真珠17個
5・・・真珠21個
6・・・真珠24個
7・・・真珠13個
8・・・真珠27個
9・・・真珠24個
真珠1個につき1000円かかるものとします。
たとえば、「10」の番号がついている衣装なら、
ベース ・・・ 10000円
「1」 ・・・ 1000円× 9個= 9000円
「0」 ・・・ 1000円×24個=24000円
で、合計43000円になります。
■■■入力■■■
標準入力から、整数値N(1 <= N <= 3万)が与えられます。
■■■出力■■■
1からN番までのすべての衣装代を求め、その合計金額を標準出力に出力してください。
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("10");
//310000
}
else if (InputPattern == "Input2") {
WillReturn.Add("30000"); //最悪計算量
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int N = int.Parse(InputList[0]);
long SumVal = 0;
for (int I = 1; I <= N; I++) {
SumVal += 10000;
int CopiedVal = I;
while (CopiedVal > 0) {
int ModVal = CopiedVal % 10;
if (ModVal == 0) SumVal += 24000;
if (ModVal == 1) SumVal += 9000;
if (ModVal == 2) SumVal += 21000;
if (ModVal == 3) SumVal += 21000;
if (ModVal == 4) SumVal += 17000;
if (ModVal == 5) SumVal += 21000;
if (ModVal == 6) SumVal += 24000;
if (ModVal == 7) SumVal += 13000;
if (ModVal == 8) SumVal += 27000;
if (ModVal == 9) SumVal += 24000;
CopiedVal /= 10;
}
}
Console.WriteLine(SumVal);
}
}
解説
ループでの処理は、多くとも、3万*5で15万ですので、
ナイーブに実装してます。