题解 | #尼科彻斯定理#
尼科彻斯定理
http://www.nowcoder.com/practice/dbace3a5b3c4480e86ee3277f3fe1e85
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。
本题含有多组输入数据。
解题: 其实就是m个连续的奇数之和 等于 m的立方;
1 首先算出m的立方 sum, 因为规律是肯定存在的,所以反推出第一个奇数
2 m个数,假设m是奇数,中间的位置就是 (m+1)/2 ,那在中间的位置前面还有几个数 ,就减去1即可得到第一个数到中间数的间隔 (m+1)/2-1, 因为每个间隔是2, 所以就可以得到第一个数和中间数的差值是 ((m+1)/2-1 )2 即 m-1
3 假设第一个数是a1 ,那么 a1+ (m-1) = 中间值 sum/m
4 最后 a1 = sum/m- (m-1)
5 求到a1后就简单了,直接拼接就好,拼接m个 a1 +(a1+2) +...的和
另,如果m是偶数个,其实结果是一样的, 先算到间隔数 m/2 -1 ,那差值就是 (m/2 -1)2
在这里要注意的是 偶数个的话中间值的前一位才是 ,即 sum/m -1 ,因此计算之后差值也是m-1
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int m = sc.nextInt(); int sum = m*m*m; int a1 =sum/m-(m-1); StringBuilder sb = new StringBuilder(Integer.toString(a1)); for(int i=1;i<m;i++){ a1=a1+2; sb.append("+"); sb.append(a1); } System.out.println(sb); } } }