【问题描述】

下面的图形是著名的杨辉三角形:

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:

1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,...

给定一个正整数N,请你输出数列中第一次出现Ⅳ是在第几个数?

【输入格式】

输入一个整数N。

【输出格式】

输出一个整数代表答案。

【样例输入】

6

【样例输出】

13

思路与分析

首先,要新建一个数组以存放杨辉三角中的值。该长度通过题目中所给出的图示进行计算,此时有一个小窍门。通过观察可知杨辉三角左右半边的值为相同的,或者说杨辉三角是中心对称的。因此,可以先从中间一分为二,选取左半边或右半边进行计算。

经过观察,不难总结出规律:y = x * (x-1) / 2

后续计算同样基于该规律所做。

代码

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);long N= sc.nextLong();//经过计算在第44721行的时候,第三列的值将会超过十亿//所以我们创建44725长度的数组long[] a=new long[44725]; a[0]=1L; //将数组0位置存入一个长整形if(N==1) { //当N==1,直接输出1System.out.println(1);return;}//声明一个标志位int count=1;for(int i=1;i<44725;i++) {for(int j=i;j>=1;j--) {//按照杨辉三角的数字规律填充数组a[j]=a[j]+a[j-1];//找到了N,则输出当前位置,位置 的计算等于 前面的个数 + 当行的位置数 if(a[j]==N) {  //前面的个数 = (count+1)*count/2  ,当行的个数 = i-j+1System.out.println((count+1)*count/2+i-j+1);return;}}//判断完后,标志位++count++;}//这是未找到的情况,就是说有些小于10亿的数在44721行之前都还没有出现 ,//那么它必然是出现在未显示出来的第二列的位置上System.out.println((N+1)*N/2+2); //所以 位置 = 前面出现的个数 + 2}
}

Q&A

为什么在for循环中不使用 break 而使用return?

答:return在for循环中的作用为:返回return所返回的值,并不会执行下一次循环。因不能干扰count标志位的运算,因此 使用return代替break。若使用break,在OJ测试时将只有60分,无法拿到满分。

为什么在存入数组元素时使用 1L 而不是 1?

答:L表示long ,long占用8个字节,表示范围:-9223372036854775808 ~ 9223372036854775807 
1L其实就是1

后面跟L一般是指数据类型,1L表示1是长整型,如果是1f 表示是float型,若是1 则表示 int 型。

【蓝桥杯】历届真题 杨辉三角形 (省赛)Java相关推荐

  1. 蓝桥杯历年真题及解析(Java B组)

    蓝桥杯历年真题及解析 Java语言 B组省赛真题及解析 2016年第七届Java B组蓝桥杯省赛真题解及析 2017年第八届java B组蓝桥杯省赛真题及解析 2018年第九届Java B组蓝桥杯省赛 ...

  2. 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】

    试题 历届真题 回文日期[第十一届][省赛][B组] 提交此题   评测记录 资源限制 时间限制:1.0s   内存限制:256.0MB  哎话说好久没写过日期题了,回忆起刚学的时候被日期统治的恐惧了

  3. 蓝桥杯--历届真题 最优包含【第十届】【决赛】【B组】

    试题 历届真题 最优包含[第十届][决赛][B组] 提交此题   评测记录 资源限制 时间限制:1.0s   内存限制:256.0MB  类似于:Acwing--902. 最短编辑距离(线性dp)_w ...

  4. 超详细思维过程 杨辉三角形 蓝桥杯 历届真题

    先说前提,这题我用自己的想法只过了50%,其他用例超时了. 官网题目链接 大多数人想到的直接暴力,其实我也差不多只是很多地方思路改进 用一个二维数组存起来同时计数,遇到的时候返回计数值 最先应该是这个 ...

  5. 蓝桥杯 历届真题 古堡算式【省赛】【本科组】

    题目描述 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE\ *\ ? = EDCBAABCDE ∗ ?=EDCBA 他对华生说:"ABCDEABCDE 应该代表不同的数字,问 ...

  6. 蓝桥杯 历届真题 中奖计算【省赛】【本科组】

    题目描述 某抽奖活动的规则是:每位参与者在纸上写下一个 8 位数的号码.最后通过摇奖的办法随机产生一个8位数字.参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号. 例如:小张写 ...

  7. 蓝桥杯 历届真题 耐摔指数【第九届】【省赛】【C组】C++ 动态规划

    资源限制 时间限制:1.0s   内存限制:256.0MB x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过 ...

  8. 蓝桥杯---历届真题 题解

    试题编号 题解 问题描述 PREV-55 小计算器 模拟 PREV-54 合根植物 并查集 PREV-53 分考场 回溯 PREV-52 小数第n位 数学 PREV-51 观光铁路 PREV-50 对 ...

  9. 蓝桥杯——历届真题左hai子右兄弟-python

    思路:dp,树转换为左孩子右兄弟的二叉树后,以i为根的树的最大深度为节点i的孩 子数量+孩子中子树最深的深度.使用li[i]记录结点i的所有子节点,dp公式即为:孩子数+max(子树深度),即 len ...

  10. Java实现 蓝桥杯 历届真题 数字拆分

    正整数可以表示为若干正整数的累加和.如,对于正整数n=6,可以分划为: 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1+1 2+2+2 2+2+1+1 2+1+1+1+1 1+1+1+1+ ...

最新文章

  1. 计算机程序的思维逻辑 (63) - 实用序列化: JSON/XML/MessagePack
  2. Android中的Android中的Surface和SurfaceView
  3. python【蓝桥杯vip练习题库】BASIC-25 回形取数
  4. java web 购物车_java web开发之实现购物车功能
  5. CodeForces - 715A Plus and Square Root(思维+构造)
  6. C语言结构体字节对齐
  7. linux显卡驱动卸载和安装,Linux下Nvidia显卡驱动卸载和卸载后的问题
  8. LeetCode刷题(21)
  9. JavaWeb——servlet介绍
  10. python中编完类后到实例编写_Python 和 JavaScript 的区别是什么?
  11. java知识点ppt背景图片_Java 给PPT幻灯片添加背景颜色和背景图片
  12. java的time_Java TimeUnit使用
  13. 怎么将两段视频合并在一起?快速操作技巧
  14. 第 十四 章 继承:究竟是好是坏
  15. Log日志存放到本地文件
  16. 浏览器交响曲 (一)浏览器中的js执行机制
  17. 唐彬森:元气森林未被解读的“长期主义”
  18. scGEMA:基于单细胞多组学增强子的基因调控网络推断
  19. 淘宝授权登录 oauth2.0
  20. sql子查询的妙用:用在from后面做子表、用在where后面做子条件以及用在select后面用作子字段

热门文章

  1. 计算机英语翻译 unit 1
  2. 内蒙古大学892程序设计
  3. 如何才能写出一份优秀的简历呢?
  4. unity 震动脚本_Unity实现苹果手机Taptic震动
  5. 北京林业大学研究生计算机学院,北京林业大学信息学院计算机应用技术导师介绍:淮永建...
  6. 读《微波工程(第三版)》笔记 (5:平面波的通解;一些补充)
  7. 如何写一篇简洁易懂的测试报告?
  8. 项目看板开发经验分享(一)——光伏绿色能源看板(可复用组件、条件动态背景图、flex布局应用、v-for遍历列表多重绝对定位)
  9. 在word文件中怎么调整行间距
  10. excel转置怎么操作_8个实用的Excel懒人小技巧,请收好