トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.207 世界のなんとか
■■■問題■■■
A以上B以下の整数のうち、3の倍数および3の付く数を、小さい順に出力してください。
なお、「3の付く数」とは、10進数表記にした時、少なくとも1つの桁が3であるような数のことです。
■■■入力■■■
A B
入力はすべて整数で与えられる。
1 <= A <= 20億
1 <= B <= 20億
0 <= B-A < 100
■■■出力■■■
該当する数を、小さい順に出力してください。
1つ数を出力するごとに改行してください。
なお、該当する数がない場合は、何も出力しないでください。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input4";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("1 10");
//3
//6
//9
//3, 6, 9は3の倍数です。
}
else if (InputPattern == "Input2") {
WillReturn.Add("10 20");
//12
//13
//15
//18
//12, 15, 18は3の倍数、13は3の付く数です。
}
else if (InputPattern == "Input3") {
WillReturn.Add("30 40");
//30
//31
//32
//33
//34
//35
//36
//37
//38
//39
//30から39まで、全て3の付く数です。
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
int A = wkArr[0];
int B = wkArr[1];
Predicate<int> Has3 = pInt =>
{
int CopiedVal = pInt;
while (CopiedVal > 0) {
if (CopiedVal % 10 == 3) return true;
CopiedVal /= 10;
}
return false;
};
for (int I = A; I <= B; I++) {
if (I % 3 == 0 || Has3(I))
Console.WriteLine(I);
}
}
}
解説
ナイーブに調べてます。