符号三角形问题

输入: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);      
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值