一、题目
生日蜡烛
某君从某年开始每年都举办一次生日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,即跳出当前的循环,进入下一次的循环。