题目分析

这道题得斜着看,可以发现如下规律:

1.题目要求的是N第一次出现的数字,那么左边的优先于右边的,所以可以只看一半。

2.搜索顺序:在下的斜行优于在上的斜行

3.C(16,32)< 10^9 < C(17,34) ,故我们搜索的斜行枚举到16即可,通过 C(k , 2k)在计算机上试一下即可知道。

4.通过一个循环来枚举每一斜行,每个斜行用二分法来检索N

5.还需要一个方法来求C( n , k ),这个直接求解即可,先分子除以分母,在乘到总数里

6.输出:通过观察可发现在 C(n,k) 这 之前有n行,既有(1+n)*n / 2 个数,该数在该行的第 K+1 个,即该数第一次出现是在 (1+n)*n / 2 + K + 1 个数。

import java.util.*;
class Main{static int n;static long c(long a,long b) {long res=1;for(long i=a,j=1;j<=b;j++,i--) {res=res*i/j;//先除在乘起来,不然会爆//该方法用在了check中,为了比较c(mid,k)与n的大小,一旦大于n结果自然知晓,也无需在往下计算       if(res>n) return res;}//System.out.println("c: "+res);return res;}static boolean check(int k) {//System.out.println("k1: "+k);long l=2*k,r=n;long res=0;while(l<=r) {//System.out.println("k2: "+k);long mid=l+r>>1;res=c(mid,k); if(res>n) r=mid-1;else if(res<n) l=mid+1;else {//if(n<2*k) return false;//n要大于2KSystem.out.println((mid+1)*mid/2+k+1);return true;}}return false;}public static void main(String args[]) {Scanner scan=new Scanner(System.in);n=scan.nextInt();for(int k=16;k>=0;k--) {if(check(k))break;}}
}

反思

1.要注重临界值的判断,例如此处的 l <= r,当 n 就是该斜行中的最大值时,最终 l=mid=r,所以循环条件应该是 l <= r。若为 l < r,那么当 l = r 时就退出循环导致查找失败。

2.当 n < 2k 时,n一定小于 C(k,2k) ,则没必要进行该斜行的检索,也不会进入循环,也达到了一个筛选的作用。

蓝桥杯B组 杨辉三角相关推荐

  1. 蓝桥杯基础练习--杨辉三角

    问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. 下面给出了杨辉三角形的前4行: 1 1 1 1 ...

  2. ACM准备之路(蓝桥杯5)杨辉三角公式解法

    由于int和long long有最大值,在20!时已经接近极限,所以在22行开始会输出错误值(21!),想过用double先除后乘,由于格式问题失败(输出非整型数字),也想过用double后转int, ...

  3. 【已解决】蓝桥杯 2017年C组第五题 杨辉三角(分析与总结)

    励志用少的代码做高效表达 题目描述: 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要. 第0行: 1 第1行: 1 1 第2行: 1 2 1 第3行: 1 3 3 1 第4行: 1 4 6 ...

  4. 关于蓝桥杯第十二届H题杨辉三角(满分结果)

    一.题目描述 二.题目初步分析 杨辉三角大家都会,这题多了一个进行判断,相等就输出位置,难点在于:n可以为10亿,运行次数过多会超内存,超时 三.寻找规律 按照这类题,想出正确结果,只有寻找规律 第一 ...

  5. 蓝桥杯 杨辉三角(找规律)

    在杨辉三角中,有这样的规律:第i行j列(i,j从0开始)的数,等于C  且左右对称,即C(a, b) == C(a, a-b),由中间点向两边递减 每行中间点(每个斜行的开始点)的列数为行数的2倍,因 ...

  6. java实现杨辉三角形,蓝桥杯杨辉三角

    杨辉三角结合图片分析是很容易理解的,特点就是三角形中的每个数字等于它上面的数字和他左上的数字相加. 图片: 代码如下: int [][] a=new int [8][8];//定义一个8行8列二维数组 ...

  7. 蓝桥杯 ALGO-1005 数字游戏 DFS记忆化搜索+剪枝+杨辉三角 python

    题目 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上一次的序列长度少1,最终只剩一个数字. 例如: 3 1 2 4 4 3 ...

  8. 蓝桥杯——杨辉三角分析总结

    题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下.从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯ 给定一个正整数 N,请 ...

  9. 蓝桥杯 基础练习(六)杨辉三角 C语言

    杨辉三角 C语言 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. 下面给出了杨辉三角形的前4行 ...

  10. 蓝桥杯python组一个星期备战记录贴

    蓝桥杯python组一个星期备赛记录贴 文章目录 前言 注意事项: 一.贪心算法 二.最小生成树之Prim算法 三.动态规划 四.递归算法 五.树与堆 前言 目前是2021年4月11日,一位pytho ...

最新文章

  1. 最长非单调增序列(最长非单调增序列,,要用N*LOG N(非常值得琢磨的算法。)...
  2. 安卓文本编辑器php cpp,用安卓原生控件封装一个简易的富文本编辑器
  3. jsp九大内置对象与servlet中java对象
  4. 最短编辑距离问题 : Levenshtein Distance
  5. [读书笔记]机器学习:实用案例解析(6)
  6. [转]给新同学的礼仪建议
  7. 递归经典案例汉诺塔 python实现_python实现汉诺塔递归算法经典案例
  8. cpu缓冲区大小怎么设置_遇到问题怎么办?手把手教你定位常见Java性能问题
  9. 台式计算机诞生,生物电脑 ①1946年,世界上第一台计算机诞生,这个庞然大物开创了一个电脑时代。从那时候起,人们不断革新、创造,把庞然大物的体积一减再减,现在我们所见的台式电脑、掌上电脑...
  10. CDA level 1 业务分析师 推荐学习书目
  11. 编译原理 -- 词法分析程序设计
  12. python背单词代码实现
  13. 电子计算机上的GT是什么意思,计算机上的“GT”是什么意思啊
  14. 2021工业交换机前十大品牌排行榜,工业交换机哪个牌子好?
  15. [转载] 晓说——第30期:海上霸主航母(下)
  16. c语言给结构体指针申请空间,结构体中的指针变量申请空间问题
  17. 扫盲:回囙囜囝回囟因囡団囤囥囦囧囨囩囱囫…(认识吗?)
  18. 一个目标100亿的互联网金融创业项目完整思路(毫无保留,赤裸裸全部是干货分享)
  19. IOS启动动画(广告)
  20. Hierarchical Russian Roulette for Vertex Connections论文研读

热门文章

  1. 如何在DPDK盒子上使用TRex
  2. 大一新生计算机课word知识,大一计算机结业论文
  3. 深蓝英文字幕助手(一款看原声影片和英文字幕学英语的小软件)发布
  4. 华为机试 - 数字涂色
  5. FastText文本分类以及生成词向量
  6. 过 DNF TP 驱动保护(二)
  7. 对手游渠道商的一些看法
  8. Kong 开源的的服务网格Kuma爬过了K8S这座大山
  9. FLV格式的视频怎么在线转换成MP4格式
  10. Power BI 企业邮箱账户注册