你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
标题:生日蜡烛
某君从某年开始每年都会举行一次生日party,并且每次都要吹灭与年龄数相同根数的蜡烛,
现在算起来,他已经吹息了236根蜡烛,
请问他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数
注意:你提交的是一个整数,请不要填写任何多余内容或说明性文字
解题思路:
本题在求解中有两种思路可以解答,一种是常规思路,即从某一个年龄开始向上累加,判断加到某年以后蜡烛数是否会有等于236,如果没有,就从下一个年龄重新判断,直到得到蜡烛数正好等于236的那一年。
第二种方法程序较为简单,但是思路不容易想,就是利用等差数列来求解,每年增加一根蜡烛,开始的那一年是首相,持续了多少年是相数,公差是1,前n年和是236,枚举举行的年限即可,但是注意判断求得的年龄是不是整数,否则会得到很多结果。
答案源码:
解法一常规思路
public class Year2016_Bt2 { public static void main(String[] args) { int ans = 1; int count = 0; for (int i = 1; i <=236; i++) { for (int j = i; j <= 236; j++) { count+=j; if (count==236) { ans=i; break; } if (count>236) { break; } } if (count==236) { break; } count=0; } System.out.println(ans); } }
解法二等差数列
public class Year2016_Bt2_2 { public static void main(String[] args) { int ans = 0; //枚举已经过了的生日的年数n for (int n = 1; n < 100; n++) { //判断得到的年龄是不是整数 if ((236-(n*(n-1)/2))%n==0) { int year = (236-(n*(n-1)/2))/n; System.out.println(year); } } } }
输出样例:
解法一输出:
解法二输出: