幸运三角形
来源:互联网 发布:淘宝贷款如何开通 编辑:程序博客网 时间:2024/05/19 13:19
幸运三角形
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况):
如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2).
- 输入
- 有多组测试数据(少于20组)。
每行含一个整数n(0<n<20)。 - 输出
- 输出相应的幸运三角形个数。
- 样例输入
34
- 样例输出
46
- 来源
- 原创
先把第一行可能的情况全部搜出来即可,后面可根据第一行来判断
超时代码
#include<stdio.h>#include<string.h>char map[25][25];int count1, count2, flag;int n;void fun(int x, int y){//在第一行确定的情况下确定接下来每行的字符 for(int k = 0; k < n-1; k++){for(int i = 0; i < n-k-1; i++){if(map[k][i] == map[k][i+1]){map[k+1][i] = '+';x++;}else{map[k+1][i] = '-';y++;}}}if(x==y){flag++; //幸运三角形的个数 }}void dfs(int m){if(m == n) {fun(count1, count2);return;}for(int i = 0; i < 2;i++){if(i&1){map[0][m] = '+';count1++;dfs(m+1);count1--; //第一行'+'个数 }else{map[0][m] = '-';count2++; //第一行'-'个数 dfs(m+1);count2--;}}}int main(){while(scanf("%d", &n) != EOF){count1 = count2 = 0;flag= 0;if((1+n)*n%2 == 1 || n== 0){ //总数为奇数不可能为幸运三角形 printf("0\n");}else{dfs(0);printf("%d\n", flag);}}return 0;}
根据上面代码求出每一个可能的值,然后打表
#include<stdio.h>#include<string.h>int a[25]= {0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757,59984};int main(){int n;while(scanf("%d", &n) != EOF){printf("%d\n",a[n]);}return 0;}
阅读全文
0 0
- 幸运三角形
- 幸运三角形
- 幸运三角形
- 幸运三角形
- 幸运三角形
- 幸运三角形
- 幸运三角形
- NYOJ 491幸运三角形
- nyoj 491 幸运三角形
- NYOJ 491 幸运三角形
- NYOJ 幸运三角形
- NOJ 491 幸运三角形
- 幸运三角形(nyoj 491)
- NYOJ491-幸运三角形
- NYOJ-491 幸运三角形
- nyoj491幸运三角形
- nyoj--幸运三角形
- NYOJ491幸运三角形
- angular前端学习
- 省市二级联动数据库生成代码(JAVA)
- mybatis实现增删查改
- 链表
- json
- 幸运三角形
- 如何做一个自动聊天的机器人或者绑定自己的微信,QQ.......
- Java中各个知识点的简短概述
- uva196
- Oracle 简单描述oracle坏块修复步骤
- 机器学习实战读书笔记----利用Adaboost元算法提高分类性能
- mybatis中Insert方法返回主键的功能
- 51Nod 1283 最小周长
- java notify和notifyAll的区别