【华为OJ】【049-尼科彻斯定理】

【华为OJ】【算法总篇章】


【华为OJ】【049-尼科彻斯定理】

【工程下载】


题目描述

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19

接口说明
    原型:
    /*
     * 功能: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
     * 原型:
     *     int getSequeOddNum(int m);
     * 输入参数:
     *     int m:整数(取值范围:1~100)
     *
     * 返回值:
     *     m个连续奇数(格式:“7+9+11”);
     */
    public String GetSequeOddNum(int m) {
        /*在这里实现功能*/
        return null;
    }

输入描述

输入一个int整数

输出描述

输出分解后的string

输入例子

6

输出例子

31+33+35+37+39+41

算法实现

import java.util.Scanner;

/**
 * Author: 王俊超
 * Date: 2015-12-25 09:04
 * Declaration: All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            System.out.println(getSequeOddNum(n));
        }

        scanner.close();
    }

    /**
     * n个连续奇数之和
     * 简单说明:
     * 如果n是奇数,则从n^2-(n-1),n^2-(n-3)...n^2-(2),n^2-(0),n^2+(2)...n^2+(n-3),n^2+(n-1) 一共有n个数,和为n^3
     * 如果n是偶数,则从n^2-(n-1),n^2-(n-3)...n^2-(1),n^2+(1)...n^2+(n-3),n^2+(n-1) 一共有n个数,和为n^3
     *
     * @param n
     * @return
     */
    private static String getSequeOddNum(int n) {

        int lo = n * n - (n - 1);
        int hi = n * n + (n - 1);

        StringBuilder builder = new StringBuilder();
        for (int i = lo; i <= hi; i += 2) {
            builder.append(i).append(‘+‘);
        }

        return builder.substring(0, builder.length() - 1);
    }
}
时间: 2024-08-26 00:47:33

【华为OJ】【049-尼科彻斯定理】的相关文章

华为OJ平台——尼科彻斯定理

题目描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 输入 输入一个int整数 输出 输出分解后的string 样例输入 6 样例输出 31+33+35+37+39+41 思路: 由例子1~4给出的结论猜测  n3 = (n*(n-1)+1) + (n*(n-1)+2 +1) + ... + (n*(n+1)-2 + 1 )(共n项,等差数列,差为2) 而又等差数列的性质知:

2015华为机试——尼科彻斯定理

题目描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和.m属于[1,100],超出范围则报错. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 解题思路:不难发现展开式从(n*n - n + 1)开始,步进2显示,共显示n个数. 代码如下: public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNext()

例30:尼科彻斯定理

尼科彻斯定理简单来想其实可以是这样,我们假设有一个数N,则他的立方为N*N*N,可以看成为N个N*N在相加,此时若N为奇数,那么则有从N*N-(N-1)/2*2,即为N*N-N+1开始到N*N+N-1为止的奇数相加的值,同样,若为偶数可得出相应的结论从N*N-1-(N/2-1)*2,即为N*N-N+1到N*N+N-1为止. 这和书上的不太一样,但书上的用的好像是穷举的方法,这样算的话,应该比书上的方法要快得多了.明白了这个道理,那么直接开始编程就可以了. 代码如下: 1 #include<std

【C语言训练】尼科彻斯定理

题目描述验证尼科彻斯定理,即:任何一个正整数的立方都可以写成一串连续奇数的和. 输入任一正整数 输出该数的立方分解为一串连续奇数的和 样例输入13样例输出13*13*13=2197=157+159+161+163+165+167+169+171+173+175+177+179+181提示本题是一个定理,我们先来证明它是成立的. 对于任一正整数a,不论a是奇数还是偶数,整数(a×a-a+1)必然为奇数. 构造一个等差数列,数列的首项为(a×a-a+1),等差数列的差值为2(奇数数列),则前a项的和

验证尼科彻斯定理

1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main(){ 6 8 //验证尼科彻斯定理:任何一个大于 2 的整数的立方都可以表示成一串连续奇数的和,这些奇数一定是要连续的(比如 3 ^ 3 == 7 + 9 + 11). 9 10 //用户输入某个整数,验证该数是否符合尼科彻斯定理,并将对应的式子打印出来. 11 int n, i, j; 12 int n

尼科彻斯定理

import java.util.Scanner; public class NicoChester { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); checkNicoChester(num); } private static void checkNicoChester(int num) { int []result = new

【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组

描述:  编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true:不满足时返回false. 知识点: 语言基础,字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归    题目来源: 内部整理  练习阶段: 初级  运行时间限制: 10Sec 内存限制: 128MByte 输入: 输入输入的数据个数 输入一个int型数组 输出: 返

华为OJ:汽水瓶

题目有点像小学数学题,因为三个空瓶可以换一瓶汽水,但喝完一瓶汽水就可以得到一个空瓶.所以相当于两个空瓶就可以换到一瓶汽水. 把输入除以2即可.这里讲一下java多出入,可以用in.hasNext(),就相当于C/C++里面的while(scanf("%d",n)!=EOF). import java.util.Scanner; public class qishuiping { public static void main(String args[]){ Scanner input=

华为OJ:分段排序

题目有点绕,一个是要二分,用三个字符串,存前,中,后三个,前,后部分都降序排序,然后后半部分再反转一下,讲三部分合起来就好了. import java.util.Scanner; public class dividesort { public static void sort(StringBuffer s){ for(int i=0;i<s.length();i++){ for(int j=i;j<s.length();j++){ if(s.charAt(i)>s.charAt(j))