一、题目
生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字
二、代码
package Lan2016;
public class B生日蜡烛 {
/*生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字*/
/*
* 思路1:
* 先把多少岁过生日的年龄设为x,而且逐年都要过,逐年蜡烛数量递增
* 到现在已经总共有236个蜡烛了,因为初始的年龄不知道,所以这种方法不可用
* 思路2:
* 暴力枚举所有的年龄,看哪一个年龄符合条件
*
* */
public static void main(String[] args) {
for (int i = 1; i <= 150; i++) {
int sum = 0;
for (int j = i; j <= 150; j++) {
sum += j;
if(sum == 236) {
System.out.println(i);
}
if(sum > 236) {
break;
}
}
}
}
}
三、反思
1.思路:
暴力枚举所有年龄的可能,
2.注意:
外层循环遍历的是从哪一岁开始过生日的,内层循环控制的是从这一岁开始逐年把蜡烛数递加,
sum要定义再第一层循环的里面,这样是为了计算从哪一岁开始以后的蜡烛数,每次计算要初始化sum更新sum的值,否则sum是会有之前循环的影响,
sum等于236的时候,输出i,表示从i岁开始的,当大于236的时候,break,即跳出当前的循环,进入下一次的循环。



















