2012-08-16 09:05:19Morris

[ZJ] a264. 骰子疊疊樂

內容 :

骰子!疊疊樂!! 

 

 

要怎樣才能用最少的骰子疊成一疊

使得表面的總和恰好為 n 呢 ~

噢你在透明的桌面上,所以最下面的點數也算在表面

輸入說明 :

多組輸入,以EOF作為結束
每組輸入為一個正整數 n (1<=n<=1000000000)

輸出說明 :

一個數字,代表至少要用幾個骰子才能疊出 n
無解請輸出 -1

範例輸入 :

50
7
32

範例輸出 :

3
-1
2

提示 :

32 = (1+2+3+4+6)*2 = 兩顆骰子五對五疊起來 //(1+2+3+4+5) + (1+2+3+5+6)也可以

出處 :

(管理:VacationClub)

很明顯的你會發現中間的骰子是對稱的兩面點數消失, 也就是 7 點,
那麼你可以歸納出 1 顆骰子 21, 2顆骰子 30~40, 3顆 44~54,
範圍都是 10, 而起始的點數公差都是 14


#include <stdio.h>

int main() {
    int n;
    while(scanf("%d", &n) == 1) {
        if(n < 21)  puts("-1");
        else if(n == 21)    puts("1");
        else {
            if(n < 30)  puts("-1");
            else {
                int m = (n-30)/14*14 + 30;
                if(n >= m && n <= m + 10)
                    printf("%d\n", (n-30)/14+2);
                else
                    puts("-1");
            }
        }
    }
    return 0;
}