描述
验证尼科彻斯定理,即:任何一个整数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个连续奇数之和的形式输出。(1≤m≤100)
输入描述
输入一个int整数
输出描述
输出分解后的string
示例
输入:6
输出:31+33+35+37+39+41
方法1:常规思路,直接计算
C语言
#include <stdio.h>
int main() {
int m;
scanf("%d",&m);
if(m==1)
{
printf("1");
return 0;
}
int i=3;
//用while来找m个奇数相加的第一个奇数
while (1) {
int sum=0,count=0;
//求m个奇数的和
for(int j=i;count!=m;j+=2)
{
sum+=j;
count++;
}
//如果不满足条件,i的值为后一个奇数
if(sum!=m*m*m)
i+=2;
else
break;
}
for(int j=0;j<m;j++)
{
if(j==m-1)
printf("%d",i+2*j);
else
printf("%d+",i+2*j);
}
return 0;
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m=in.nextInt();
if(m==1)
{
System.out.printf("1");
return ;
}
int i=3;
//用while来找m个奇数相加的第一个奇数
while (true) {
int sum=0,count=0;
for(int j=i;count!=m;j+=2)
{
sum+=j;
count++;
}
//如果不满足条件,i的值为后一个奇数
if(sum!=m*m*m)
i+=2;
else
break;
}
for(int j=0;j<m;j++)
{
if(j==m-1)
System.out.printf("%d",i+2*j);
else
System.out.printf("%d+",i+2*j);
}
}
}
方法2:找规律,找到首个相加的奇数和输入的数之间的关系。
C语言
#include <stdio.h>
int main() {
int m;
scanf("%d",&m);
int i=m*m-m+1;
for(int j=0;j<m;j++)
{
if(j==m-1)
printf("%d",i+2*j);
else
printf("%d+",i+2*j);
}
return 0;
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m=in.nextInt();
int i=m*m-m+1;
for(int j=0;j<m;j++)
{
if(j==m-1)
System.out.printf("%d",i+2*j);
else
System.out.printf("%d+",i+2*j);
}
}
}