【每日蓝桥】35、一六年省赛Java组真题“生日蜡烛”

你好呀,我是灰小猿,一个超会写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);
			}
		}

	}

}

输出样例:

解法一输出:

解法二输出:

 

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

猜你喜欢

转载自blog.csdn.net/weixin_44985880/article/details/115006643