ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java机试题:验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。(等差数列)

2021-12-30 13:05:55  阅读:246  来源: 互联网

标签:斯定理 Java 奇数 int num numTemp sc new 等差数列


思路一(思路有点长了):

import java.util.*;
/*
 *  验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
 */
public class Main {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       while(sc.hasNextInt()){
           int num = sc.nextInt();
           // 立方值
           int value = num * num * num;
           // 连续奇数最大最小的差
           int differMinMax = 2 * (num - 1);
           // 连续奇数最大最小的值范围
           int min = value / num - differMinMax;
           if(min % 2 == 0){
               min -= 1;
           }
           int max = value / num + differMinMax;
           if(max % 2 == 0){
               max += 1;
           }
           // 找符合条件的连续奇数
           int sum = 0;
           // 直接使用treeSet,排序(连续奇数不可能有重复,故直接使用TreeSet默认排序)
           TreeSet<Integer> nums = new TreeSet<Integer>();
           // 每次--2,作为连续奇数最大的
           for (int i = max; i >= min; i = i - 2) {
               sum = 0;
               nums = new TreeSet<Integer>();
               int numTemp = i;
               sum += numTemp;
               nums.add(numTemp);
               // 求当前最大奇数,连续的num个奇数和
               for (int j = 1; j < num ; j++) {
                   numTemp = numTemp - 2;
                   sum += numTemp;
                   nums.add(numTemp);
               }
               if (sum == value){
                   break;
               }
           }

           // 输出连续奇数和形式
           StringBuffer sb = new StringBuffer();
           Iterator it = nums.iterator();
           while (it.hasNext()){
               sb.append(it.next()+"+");
           }
           // 去掉最后一个多余+,substring下标位置,前包后不包
           System.out.println(sb.substring(0,sb.length()-1));
       }
    }
}

思路二使用等差数列:

import java.util.*;
/*
 * 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
 * 这里连续奇数是等差数列
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLong()){
            long n = sc.nextLong();
            // 该题已知Sn = n^3,n = n,d = 2,故根据等差数列(相关知识如下图)相关公式,可以求出a1 
            long a1 = n * n - n + 1;
            System.out.print(a1);
            for(int i=1; i<m ; i++){
                System.out.print("+" + (a1 += 2));
            }
            System.out.println();
        }
    }
}

 

 参考链接:http://www.360doc.com/content/18/0727/07/47813312_773519742.shtml

标签:斯定理,Java,奇数,int,num,numTemp,sc,new,等差数列
来源: https://www.cnblogs.com/duiyuedangge/p/15748287.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有