您的位置:首页 > 其它

符号三角形问题

2017-05-07 21:55 176 查看
输入:n (1<n<=23).

输出不同方案的个数.

测试输入

3


测试输出

4


源代码

#include <stdio.h>
#define MAX 24

int count=0;//当前 +号的数量
int sum=0;//已找到的符号三角形的数量
int p[MAX][MAX];//1代表+,0代表-
int n=0;
int half=0;//half=n*(n+1)/4

void back_triangle(int t)
{
int i,j;
if((count>half) || (t*(t-1)/2-count>half)) return;
if(t>n) sum++;
else
{
for(i=0;i<2;i++){
p[1][t]=i;
count+=i;
for(j=2;j<=t;j++){
p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2];
count+=p[j][t-j+1];
}
back_triangle(t+1);
for(j=2;j<=t;j++)
count-=p[j][t-j+1];
count-=i;
}
}
}

int main()
{
scanf("%d",&n);
half=n*(n+1)/2;
if(half%2==1) //输出个数为奇数时
return 0;
half/=2;
back_triangle(1);
printf("%d\n",sum);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: