链接:
原题出处
来源:牛客网
验证尼科彻斯定理,即:任何一个整数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,char * pcSequeOddNum);
输入参数:
int m:整数(取值范围:1~100)
返回值:
m个连续奇数(格式:“7+9+11”);
*/
public String GetSequeOddNum(int m)
{
/在这里实现功能/
return null;
}
输入描述:
输入一个int整数
输出描述:
输出分解后的string
示例1
输入
6
输出
31+33+35+37+39+41
思路:
仔细观察发现,其实
2^3=3+5
3^3=7+9+11
3和5怎么来的?
其实就是2^2左右两个奇数
7,9,11是3^2 以及 3^2两边的奇数
以此类推,对于4和5也是一样的
只是对于偶数来说,不要自己的平方,奇数需要自己的平方,然后在加上自己数平方的左右两边的奇数,什么时候奇数够了就停止,比如3^ 3需要3个奇数,那么就是3^2 以及 3^两边的两个奇数,左边一个右边一个!
如果是5则需要5^2以及其左边两个和右边两个的奇数一共5个
下面是代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
//发现数学规律哎虚浮
public static String GetSequeOddNum(int m){
int[] result = new int[m];
if((m*m)%2==1){
int count = 1;
for(int i = 0;i < m-1;count++){
result[i++]=m*m-2*count;
result[i++]=m*m+2*count;
}
result[m-1]=m*m;
}else{
int count = 0;
for(int i = 0;i < m;count++){
result[i++]=(m*m-1)-2*count;
result[i++]=(m*m+1)+2*count;
}
}
Arrays.sort(result);
StringBuffer sb = new StringBuffer();
for(int i = 0;i < result.length;i++){
if(i==result.length-1){
sb.append(result[i]);
}else{
sb.append(result[i]).append("+");
}
}
return sb.toString();
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int m = in.nextInt();
System.out.println(GetSequeOddNum(m));
}
}
}