白駿2292号(蜂の巣)


質問する



上の図に示すように、六角形のハニカムがあります.図に示すように、中央の部屋1から隣の部屋に戻り、1を増やすごとに番号を住所とすることができる.数値Nが与えられた場合、セルの中央1からN号室までの間に最小の部屋を通過したときにどの部屋(開始と終了を含む)を通過したかを計算する計算プログラムが作成される.たとえば、13~3個、58~5個です.

入力


第1行はN(1≦N≦10000000)を与える.

しゅつりょく


入力として、最小の部屋を通って所定の部屋に着いたとき、出力は何部屋を通ったかを出力する.

ろんり


例えば、2~7から2つの部屋を通り抜けます.1号室、2~7号室
8~19は3部屋、20~37は4部屋を通ります.
つまり、数字の間にはルールが存在する.
前の数字[2.8.20]後の数字[7,19,37]はルールが見えませんか?
6,12,18,24 ... このように増加します.
以下をコードで表す.
	    t+=1;
            a += 6 * t;
            b += 6 * (t+1);

正解

> #include <stdio.h>
int main()
{
	//cnt 2인 이유는 2,7부터 시작하기 때문이다. 즉, 이미 2개의 방을 지나 온 것이다.
    int a=2,b=7,cnt=2,t=0,n,TF=1;
    scanf("%d",&n);

    if (n==1){ printf("1"); TF = 0;} // 1인지 판별하기

    while (TF){
        if (n >= a && n <= b)
        {
            cnt += t;
            printf("%d",cnt);
            break;
        }
        else{
            t+=1;
            a += 6 * t;
            b += 6 * (t+1);
        }
    }
    return 0;
}