尼科彻斯定理
题目描述
验证尼科彻斯定理,即:任何一个正整数的立方都可以写成一串连续奇数的和。
输入
任一正整数。
输出
该数的立方分解为一串连续奇数的和
样例输入 Copy
13
样例输出 Copy
131313=2197=157+159+161+163+165+167+169+171+173+175+177+179+181
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
int n=scan.nextInt();
int a=n*n*n;
if(a==1)
System.out.println("1*1*1=1=1");
else{
int[] arr=new int[a];
System.out.print(n+"*"+n+"*"+n+"="+a+"=");
int count=0;
int w=0;
for(int i=n*n+1-n;count<n-1;i+=2,count++){
arr[count]=i;
System.out.print(arr[count]+"+");
w=arr[count];
System.out.print(w+2);
System.out.println();
}
}
}
}
以上方法虽然样例通过了,但是输出的方式不是很好,时间花费在了输出格式上
然后有一种优化解(来自dalao)可以康康
import java.util.Scanner;
public class Main {
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
int n=scan.nextInt();
System.out.print(n+"*"+n+"*"+n+"="+n*n*n+"=");
int[] a=new int[n];
if(n%2==0){
int i;
for(i=0;i<n;i++) {
int z=n*n;
a[0]=(z+1)-(n/2)*2;
a[i]=a[0]+i*2;
if(i<a.length-1)
System.out.print(a[i]+"+");
if(i==a.length-1)
System.out.print(a[i]);
}
}
if(n%2!=0){
int i;
for(i=0;i<n;i++) {
int z=n*n;
a[0]=z-((n-1)/2)*2;
a[i]=a[0]+i*2;
if(i<a.length-1)
System.out.print(a[i]+"+");
if(i==a.length-1)
System.out.print(a[i]);
}
}
}
System.out.println();
}
}
注意最后一行单独输出一空行的输出格式,不然判题机会答案错误555…
这篇博客探讨了如何优化尼科彻斯定理的验证方法,即证明任何正整数的立方都能表示为一串连续奇数之和。博主分享了两种Java实现,虽然原始方法能通过样例,但输出格式不够理想。优化后的解决方案提高了输出效率,并确保了正确格式。适合对算法优化和编程感兴趣的读者阅读。
337

被折叠的 条评论
为什么被折叠?



