幸运三角形
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况):
如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2).
-
输入
-
有多组测试数据(少于20组)。
每行含一个整数n(0<n<20)。
输出
- 输出相应的幸运三角形个数。 样例输入
-
3 4
样例输出
-
4 6
#include<stdio.h> #include<string.h> int count=0,ans[30]; int tri[25][25]; void DFS(int n) { if(n>20) return; else { for(int i=0;i<2;i++) { tri[1][n]=i; count+=i; for(int j=2;j<=n;j++) { tri[j][n+1-j]=tri[j-1][n+1-j]^tri[j-1][n+2-j]; count+=tri[j][n+1-j]; } if((count*2)==(n*(n+1)/2))//无语,把n+1写成n-1死活找不出错来 ans[n]++; //printf("%d ",ans[n]); DFS(n+1); for(int j=2;j<=n;j++) { count-=tri[j][n+1-j]; } count-=tri[1][n]; } } } int main() { int N; DFS(1); while(scanf("%d",&N)!=EOF) { printf("%d\n",ans[N]); } return 0; }
-
有多组测试数据(少于20组)。