符號三角形問題
下圖所示的三角形中,有14個“+“和14個“-”。2個同號下面是+,兩個異號下面是-。
+ + - + - + +
+ - - - - +
- + + + -
- + + -
- + -
- -
+
在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的“+”和“-”相同。
利用回溯法,參考程式碼如下:
#include <stdio.h>
int sum,count;
int half;
int **p;
int n;
void backtrack(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=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];
}
backtrack(t+1);
for(j=2;j<=t;j++)
count+=p[j][t-j+1];
count-=i;
}
}
}
int main()
{
int i,j;
printf("input the number of symbols in the first line:");
scanf("%d",&n);
count=0; sum=0;
half=(n+1)*n/2;
if(half%2==1)
{
printf("the number is 0");
return 0;
}
p=new int *[n+1];
for(i=0;i<n+1;i++)
p[i]=new int[n+1];
for(i=0;i<n+1;i++)
for(j=0;j<n+1;j++)
p[i][j]=0;
backtrack(1);
printf("the result is %d.\n",sum);
return 0;
}
帶輸出結果的:
#include <stdio.h>
#include <math.h>
int n,count=0,half,sum=0;
int **a;
void backtrack(int t)
{
if(count>half || (t*(t+1)/2-count>half)) return;
int i,j;
if(t==n){
sum++;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[i][j])
printf("-");
else
printf("+");
}
printf("\n");
}
printf("=====================\n");
}
else{
for(i=0;i<2;i++){
a[0][t]=i;
count=count+i;
for(j=1;j<=t;j++){
a[j][t-j]=a[j-1][t-j]^a[j-1][t-j+1];
count+=a[j][t-j];
}
backtrack(t+1);
for(j=1;j<=t;j++){
count-=a[j][t-j];
}
count=count-i;
}
}
}
int main()
{
int i,j,k;
scanf("%d",&n);
if((n*(n+1)/2)%2==1)
{
printf("result is 0.\n");
return 0;
}
half=n*(n+1)/4;
a=new int*[n];
for(i=0;i<n;i++)
a[i]=new int [n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
a[i][j]=0;
}
backtrack(0);
printf("the result is %d.\n",sum);
return 0;
}
相關文章
- EJB QL裡的〈符號問題符號
- latex 中求和符號、箭頭問題符號
- iOS Url特殊符號編碼問題iOS符號
- php+mysql 解決emoji表情符號問題PHPMySql符號
- oracle使用者口令中帶@符號問題Oracle符號
- lombok編譯遇到“找不到符號的問題”Lombok編譯符號
- 如何解決jQuery的美元$符號衝突問題jQuery符號
- 解決UILable標點符號居中的問題UI符號
- mongo shell中特殊判斷符號轉義的問題Go符號
- url引數中有+、空格、=、%、&、#等特殊符號的問題解決符號
- c語言之五符號整型資料相減問題C語言符號
- Oracle 轉移符問題Oracle
- 無符號數相減得到的是無符號還是有符號?符號
- [C]有符號數和無符號數符號
- CSS @ 符號CSS符號
- 特殊符號符號
- 符號使用符號
- 符號(註釋符+轉義符+接續符)符號
- VS2008中解決“cout未知識別符號”問題符號
- 【問題處理】使用trim和 replace處理字串中的換行符號字串符號
- 如何利用JS設定“背景-問題-方案-評價-參考”的前置符號?JS符號
- Linux 初級問題-3.符號連結和環境變數Linux符號變數
- 關於有符號與無符號的位元組符號
- 符號連結符號
- Google Map 符號Go符號
- Html 特殊符號HTML符號
- PHP基本符號PHP符號
- Shell 符號(轉)符號
- 識別符號符號
- 找不到符號符號
- MySQL行號問題MySql
- 無題號 分配問題 題解
- Java 修飾符順序問題Java 修飾符
- java static修飾符的問題Java
- 深入理解ES6--6.符號與符號屬性符號
- C語言之有符號無符號整數取值範圍C語言符號
- dotNet符號檔案(pdb),符號包(snupkg)和SourceLink符號
- latex 屬於符號和根號符號