验证尼科彻斯定理

 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 num;
13  int sum = 0;
14  printf("请输入一个整数:");
15 scanf("%d", &n);
16  num = n * n * n;
17
18  for (i = 1; i < num; i += 2){   //保证i是奇数
19
20   for (j = i; j < num; j += 2){
21    sum += j;
22    if (sum == num){
23     if (j - i > 4){
24      printf("%d = %d + %d + ... +%d\n",num, i, i + 2, j);
25     }
26     else{
27      printf("%d = %d + %d + +%d\n", num, i, i + 2, i + 4);
28     }
29     goto FINISH;
30    }
31    if (sum > num){
32     sum = 0;
33     break;
34    }
35   }
36  }
37
38
39 FINISH:
40  system("pause");
41  return 0;
42 }

原文地址:https://www.cnblogs.com/Leafbud/p/12638277.html

时间: 2024-11-25 05:48:10

验证尼科彻斯定理的相关文章

【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项的和

华为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

尼科彻斯定理

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) * *

《喀秋莎》词作者伊萨科夫斯基

<喀秋莎>词作者伊萨科夫斯基老家的文化馆里,开了一家"<喀秋莎>博物馆",里面保存着世界各地,用不同语言翻译和出版的<喀秋莎>歌篇http://www.ximalaya.com/zhubo/27347791/ http://www.ximalaya.com/zhubo/27347801/ http://www.ximalaya.com/zhubo/27347808/ http://www.ximalaya.com/zhubo/27347811/ ht

HDU DP?(Lucas + 帕森斯定理)

DP? 题目链接:Click Here~ 题目分析: 给出一个终点坐标,求出(0,0)开始的到(n,k)的最小权重和. 算法分析: 根据杨辉三角的性质可以知道,只要往两边走则得到的值会更小.因为,C(N,M) = C(N,N-M).所以,我们尽量的斜向的往旁边走.但是,在斜向走k步后就已经到达边界了,此时只要顺着1一直往上走就可以了.所以,经过的最短路和为:C(n,k) + C(n-1,k-1) + C(n-2,k-2) + ...... C(n - k + 1,1)+ C(n - k,0) +

SYSU-1,URAL 1894,闽科夫斯基和(黑科技)

题目大题:给你两个相交的凸包,其中一个可移动,问你至少移动多少能够让两个凸包分离 解:我艹我为此写了7k计算几何还是wa6了,后面去看discuz才知道是用一个闽科夫斯基和的黑科技. 闽科夫斯基和大概就是两个点集的任意两个点对相加得到的一个新点集,差则是相减.这题用到了以下几个性质: 1:两个凸包的闽科夫斯基差还是凸包 2:两个凸包若相交,那么他们闽科夫斯基差的凸包覆盖原点 易知答案是原点到凸包最短距离(可以看作一个凸包平移这个向量,那么他们的闽科夫斯基差就不过原点了,所以相离) 现在问题在于如