1. 程式人生 > >幸運新OA平臺制作三角形

幸運新OA平臺制作三角形

三角形 bbs 來源 平臺 can std () -- 源碼論壇

描述
話說有這麽一個圖形新OA平臺制作QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com,只有兩種符號組成(‘+’或者‘-’),圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外(第一層為所有可能情況),每層形狀都由上層決定,相鄰的符號相同,則下層的符號為‘+’,反之,為‘-’;如下圖所示(n = 3 時的兩種情況):

如果圖中的兩種符號個數相同,那這個三角形就是幸運三角形,如上圖中的圖(2).

輸入
有多組測試數據(少於20組)。
每行含一個整數n(0<n<20)。
輸出
輸出相應的幸運三角形個數。
樣例輸入
3
4
樣例輸出
4

6
來源
原創
上傳者
ACM_楊延璽
算法思想:把+看成1,把-看成0,具體看代碼實現
復制代碼
1 #include<stdio.h>
2 int b[25][25];
3 int n,ans;
4 void dfs(int z,int x,int y) //x = 0(表示‘-‘),y = 1(表示‘+‘),
5 {
6 int x1,y1;
7 if(z == n)
8 {
9 if(x == y)
10 {
11 ans++;
12 return;
13 }
14 return;
15 }
16 for(int k=0; k<=1; k++)
17 {
18 x1 = x,y1 = y;
19 b[0][z] = k; //用來存儲三角形第一行
20 b[0][z]>0 ? y1++ : x1++;
21 for(int i=1,j=z-1; j>=0; i++,j--) //用來判斷上一行相鄰數
22 {
23 b[i][j] = b[i-1][j] ^ b[i-1][j+1]; //(1^0 || 0^1 == 0); (1^1 || 0^0 == 1)
24 b[i][j]>0 ? y1++ : x1++;
25 }
26 dfs(z+1,x1,y1);
27 }
28 }
29 int main()
30 {
31 int a[25];
32 a[0] = 0;
33 for(int i=1; i<=20; i++) //a[25]用來存儲n三角形為偶數還是奇數
34 a[i] = (a[i-1]+i);
35 while(scanf("%d",&n)!=EOF)
36 {
37 ans = 0;
38 if(a[n]%2 == 0) //為偶數時才可能有幸運三角形
39 dfs(0,0,0);
40 printf("%d\n",ans);
41 }
42 return 0;
43 }
復制代碼

幸運新OA平臺制作三角形