尊龙游戏旗舰厅官网
收集整理的这篇文章主要介绍了
符号三角形
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
符号三角形的 第1行有n个由“ ”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是” “,2个异 号下面是”-“ 。计算有多少个不同的符号三角形,使其所含” “ 和”-“ 的个数相同 。 n=7时的1个符号三角形如下:
- -
- - - -
- -
- -
- -
- -
input
每行1个正整数n <=24,n=0退出.
output
n和符号三角形的个数.
sample input
15
16
19
20
0
sample output
15 1896
16 5160
19 32757
20 59984
这道题应该用深搜去构造顶层,然后推算出其他的层,在推算的同时进行给其中一种符号的计数,最后判断该符号的数是不是总符号数的一半,剩下的一些细节(诸如符号总数是否可以整除2、如何在输入0时结束程序等)我就不解释了,不过代码里的注释中会有。
c 版本一
dfs
#include
using namespace std;
int n,total,sum;
int word[30][30]; //存储符号的数组
void wxy() //函数名没有含义
{int x=n,y=0; //x用于枚举层数,y用于计算其它层负号个数while(x--) //枚举层数for(int i=1;i<=x;i ){word[x][i]=(word[x 1][i] word[x 1][i 1])%2; //定义第n-x 1层的第i个符号if(word[x][i]) y ; //若word[x][i]为负号,其它层负号个数加1}if(sum y==n*(n 1)/2/2) total ; //若负号的个数为符号总数的一半,情况数加1(运用了等差数列)
}
void dfs(int x)
{for(int i=0;i<2;i ) //0为正号,1为负号{if(i) sum ; //给题目中顶层的负号计数word[n][x]=i; //定义顶层的第x个符号是正还是负if(x==n) wxy(); //若顶层的所有符号定义完毕,计算其它层的负号个数else dfs(x 1); //定义顶层的第x 1个符号if(i) sum--; //回溯}
}
main()
{while(cin>>n&&n) //输入n,判断n为不为0{cout<c 版本二
水题
#include
#include
#include
#include
#include
using namespace std;
int n;
int a[30][30];int main()
{while(scanf("%d",&n)!=eof){if(n==0) break;//int ans=0;cout <c 版本三
这个应该会ole
#include
#include
#include
#include
#include
using namespace std;
int n;
int a[30][30];int main()
{while(scanf("%d",&n)!=eof){if(n==0) break;int ans=0;for(int i=0;i<1<>j & 1;if( a[0][j]==1) cnt1 ;if( a[0][j]==0) cnt0 ;//cout << a[0][n-j-1];}for(int k=1;k
总结
以上是尊龙游戏旗舰厅官网为你收集整理的符号三角形的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。