题目:
某君从某年开始每年都举办一次生日 partyparty,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了 236 根蜡烛。
请问,他从多少岁开始过生日 partyparty 的?
请输出他开始过生日 partyparty 的年龄数。
分析:
- 正常情况下年龄1 - 100,从
某一年
开始求和到现在
这个年龄,明显是一个d = 1的等差数列任意两项求和的问题。两个求和公式
:Sn=n*a1+n(n-1)d/2或Sn=n(a1+an)/2 - 当然一时没想到等差数列求和,应该也可以想到暴力。就是两层循环嵌套嘛,i 是
某一年
, j 是到现在
对 i 到 j 之间求和(注意:要用target = 236
每一次来减 ,因为可以把 target == 0 作为结束循环的条件,结束输出i)
代码:
答案:26
//枚举两项i 和 j
public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
for (int j = 1; j < 100; j++) {
//(a1 + an) * n / 2
if ((i + j) * (j - i + 1) / 2 == 236) {
System.out.println(i);
}
}
}
}
public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
//Sn=n * a1 + n * (n - 1) d / 2 枚举生日次数n
int t = i * (i - 1)/2;
//等差求首项
if ((236 - t) % i == 0) {
System.out.println((236 - t) / i + " " + i);
}
}
}
//暴力
public static void main(String[] args) {
int arr[] = new int[100];
int sum = 0;
int ans = 0;
//初始化年龄
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
//计算求和
for (int i = 0; i < arr.length; i++) {
int target = 236;
for (int j = i; j < arr.length; j++) {
target = target - arr[j];
if (target == 0) {
System.out.println(i + 1);//要注意i的一个起始位置,此处i从0开始,故年龄需要+1
break;
}
}
}
}