マトリョーシカ的日常

ワクワクばらまく明日のブログ。

似通った数字たち(Topcoder SRM568 div2 250pt)

英語さえ読めれば簡単な問題

 111112 - 無料写真検索fotoq
photo by yoco**


 TopCoder Statistics - Problem Statement
 
 Topcoderの問題文は全て英語です。問題自体は簡単なのに、わからない単語や複雑な表現があったりして解けないこともしばしば。でもエキサイト翻訳などの力を借りればOK。解ければ良いんです。
 
 理系用語はこちらのサイトで調べると便利です。
 オンライン辞書|英語:スペースアルク

 さて問題。ふたつの正の整数A,Bに対して、A<=10*BかつB<=10*Aならふたつは「似ている」と定義されます。A=1,B=10ならOK。A=1,B=11なら×。与えた下限、上限の数字の中から似ている数字が一組も出ないように複数の整数を選ぶとき、最大の個数はいくつか。というもの。

 下限の数字Lをとり、10*L+1した数NはLとは似ていない数字です。さらにNと似ていない数字は10*N+1であり…。これを続けていき上限を越せばループを抜けるようにすればいいですね。

 以下、コード。

#include 
#include 
#include 
#include 
using namespace std;
 class TheSimilarNumbers{
	public:
    int find(int low, int up){
        int i=0,n=low;
            printf("%d %s\n",n,(n<=up)? "ok":"×");
        for(i=0;n
  • (n<=up)? "ok":"×")は三項演算子というもので、(条件)? 真の処理:偽の処理 と書きます。

C言語講座:三項演算子(1)