验证尼科彻斯定理,即:任何一个整数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^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
#include <math.h> #include <stdio.h> int main() { int m,n,mid; scanf("%d",&m); n=pow(m,3);mid=n/m; if(m%2==1) //由中位数反推首项 { int temp=m/2;mid-=2*temp; } else { int temp=m/2;mid=mid-2*temp+1; } int i=0; while(i<m) { if(i==m-1) printf("%d",mid+2*i); else printf("%d+",mid+2*i); i++; } return 0; }
#include <stdio.h> int main() { int a; scanf("%d",&a); int m=a*a; for(int i=m-a+1;i<m+a-1;i=i+2){ printf("%d+",i); } printf("%d",m+a-1); return 0; }
#include <stdio.h> #define d 2//等差数列的公差为2 int main() { int n = 0; scanf("%d",&n); int a[n];//用来存储每一项 for(int i = 1;i<=n;i++)//计算除第一项外的其它项数的值 { a[0]=n*(n-1)+1;//计算等差数列的首项 a[i]=a[0]+(i-1)*d;//等差数列的公式 } printf("%d",a[1]);//先打印第一项,后面的加号才好处理 for(int j = 2;j<=n;j++) { printf("+%d",a[j]);//打印后面几项 } return 0; }
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 int main() { //输入数字m int m; scanf("%d", &m); //根据观察得出每个数字m的立方拆开的首项是有规律的: 1 3 7 13 21 31 42 。。。。。。。他们之间的差值是正偶数2 4 6 7 810.。。 //由此便可以创建出一个数组存放首项,之后的每一项都是+2得到的连续的奇数,由此全部相加m个连续奇数即可验证定理 //得到每一个首项 int arr[100]; int i = 1; int n = 0; for (int j = 0; j < 100; j++) { i = i + n; arr[j] = i; n = n + 2; } //定理得出: if (m >= 1 && m <= 100) { int k = 0; int i = 0; if (i < m - 1) { for (k = arr[m - 1]; i < m - 1; i++) { printf("%d+", k); k = k + 2; } } if (i == m - 1) { printf("%d", k); } } return 0; }
#include <stdio.h> int main() { int a; scanf("%d",&a); if(a == 0) { printf("%d",a); return 0; } int math = a*a-a+1; for(int i = 0;i<a;i++) { if(i == 0) { printf("%d",math); } else { printf("+%d",math); } math += 2; } return 0; }
#include <stdio.h> int main() { int a, b; scanf("%d", &a); b=a*a*a/a-(a/2)*2+(a%2==0);//算出第一位奇数 while(a--) { printf("%d",b); b+=2; if(a>0) printf("+"); } return 0; }