幸運三角形

2021-06-23 09:44:34 字數 1253 閱讀 1101

/*

時間限制: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 時的...