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())
		{
			int input=sc.nextInt();
			if (input>100||input<1)
			{
				return;
			}
			int start_value=input*input-input+1;
			int index=0;
			while (index<input)
			{
				if (0!=index)
				{
					System.out.print("+");
				}
				System.out.print(start_value+index*2);
				index++;
			}
		}
		sc.close();
	}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-04 10:26:03

2015华为机试——尼科彻斯定理的相关文章

华为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) 而又等差数列的性质知:

例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】【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) * *

2015华为机试

第一题(60分): 按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ,"123456789",则输出为"abc00000","12345678","90000000" #include<iostream> using namespace std; void solve(char *str , int n , in

2015华为机试——小明的筷子

题目描述: 小明是个马大哈,某天他到超市买了若干双筷子(n<20)筷子的长度不尽相同,他把全部筷子都放在购物袋里面拿回家,路上不小心漏了一根 请你用程序帮他找出是漏掉的筷子是多长的. 输入:  剩下的筷子数组,如:1, 2, 3, 2, 1, 3, 2 返回值:漏掉的筷子长度,如上述输入返回:2(当输入的筷子数据异常时返回-1,如:找不到漏掉的筷子) 解题思路:使用HashMap对筷子的种类与数量进行键值对匹配存储,当出现重复筷子时,对应的筷子数量+1,然后遍历一次HashMap,获取筷子的数量

2015华为机试——计算两个正整数的最大公约数和最小公倍数

题目描述: 接口说明 原型: long getMaxDivisor(long lFirstInput, long lSecondInput); 输入参数: int first: 第一个整数; int second: 第二个整数; 返回值: 最大公约数 long getMinMultiple(long lFirstInput, long lSecondInput); 输入参数: int first: 第一个整数; int second: 第二个整数; 返回值: 最小公倍数 解题思路:使用辗转相除法