/*
時間限制:1000 ms | 記憶體限制:65535 kb
難度:3
描述話說有這麼乙個圖形,只有兩種符號組成(『+』或者『-』),圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外(第一層為所有可能情況),每層形狀都由上層決定,相鄰的符號相同,則下層的符號為『+』,反之,為『-』;如下圖所示(n = 3 時的兩種情況):
+ - - + - +
- + - -
- +
圖1 圖2
如果圖中的兩種符號個數相同,那這個三角形就是幸運三角形,如上圖中的圖2
輸入有多組測試資料(少於20組)。
每行含乙個整數n(0#include #include //求unsigned int裡1的個數
int bitcount2(unsigned int num)
return c ;
}//求三角形行數為n,第一行值為num時,該三角形是否為幸運三角形
bool isluckydelta(unsigned int num, unsigned int n)
{ unsigned int begin_num = num;//begin_num<2^(n-1),每bit 1代表『-』,0代表『+』
unsigned int plus_count = 0;//0的個數
unsigned int sub_count = 0;//1的個數
//將第0層的0個數和1個數計入plus_count和sub_count
sub_count += bitcount2(num);
plus_count = n - sub_count;
//迴圈,從第0層到倒數第二層(第n-2層)
//由第floor層算出第(floor-1)層,並計算出(floor-1)層0、1的個數,
//分別計入plus_count、sub_count
for(unsigned int floor = 0; floor<(n-1); floor++)
{ for(unsigned int bit=(n-1); bit>floor; bit--)
{ if((begin_num>>bit & 1) ^ (begin_num>>(bit-1) & 1))
{begin_num |= (1<=20)
{ printf("n必須滿足:0
output:
count(19) = 32757
cost time = 875ms
幸運三角形
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 話說有這麼乙個圖形,只有兩種符號組成 或者 圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外 第一層為所有可能情況 每層形狀都由上層決定,相鄰的符號相同,則下層的符號為 反之,為 如下圖所示 n 3 時...
幸運三角形
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 話說有這麼乙個圖形,只有兩種符號組成 或者 圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外 第一層為所有可能情況 每層形狀都由上層決定,相鄰的符號相同,則下層的符號為 反之,為 如下圖所示 n 3 時...
NYOJ 幸運三角形
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述話說有這麼乙個圖形,只有兩種符號組成 或者 圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外 第一層為所有可能情況 每層形狀都由上層決定,相鄰的符號相同,則下層的符號為 反之,為 如下圖所示 n 3 時的...