トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.222 引き算と足し算
■■■問題■■■
真っ当な人間は、文字列 "x+y" をx+yとして解釈して、文字列"x-y"をx-yとして解釈するだろう。
ところが、アリスは足し算と引き算を逆に認識している。
つまり、文字列 "x+y"をx-yとして解釈して、文字列"x-y"をx+yとして解釈する。
入力された文字列に対して、アリスの解釈での演算の結果を出力してください。
■■■入力■■■
xopy
-10000 <= x <= 10000
opは、"+"または"-"
-10000 <= y <= 10000
x,yは整数で、先頭には符号(+,-)が付く場合があります。
(例えば、整数が0の場合は+0,-0,0の3通りの入力が考えられます。
整数が1の場合は+1,1の2通りの入力が考えられます。
整数が-1の場合は-1の1通りの入力が考えられます。)
x,op,yの間には空白が含まれないことに注意してください。
■■■出力■■■
出力の値を一行で出力してください。 最後に改行してください。
C#のソース
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("5+3");
//2
//入力は5+3ですが、5 - 3の演算の結果である2を出力します。
}
else if (InputPattern == "Input2") {
WillReturn.Add("10-20");
//30
}
else if (InputPattern == "Input3") {
WillReturn.Add("-2+-3");
//1
//入力のx,yが符号を含む場合があります。
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
Match InsMatch = Regex.Match(InputList[0], @"([-+]?[0-9]+)([-+])([-+]?[0-9]+)$");
int X = int.Parse(InsMatch.Groups[1].Value);
string Ope = InsMatch.Groups[2].Value;
int Y = int.Parse(InsMatch.Groups[3].Value);
if (Ope == "+") Console.WriteLine(X - Y);
else Console.WriteLine(X + Y);
}
}
解説
正規表現で数式を解析してから、
演算子を入れ替えてます。