题解 | #尼科彻斯定理#

尼科彻斯定理

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);
            }
        }
}
全部评论

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务