高手帮我检查下这个java小程序,多谢!
条件:x<y<z,x^3+y^3=z^3+1,用程序找出头10组符合条件的x,y,z数值,由x增长顺序显示出结果。importjava.util.*;publicclas...
条件:x<y<z, x^3 + y^3 = z^3 +1, 用程序找出头10组符合条件的x,y,z数值,由x增长顺序显示出结果。
import java.util.*;
public class ThreesX{
static int x;
static int y;
static int count =0;
static double z;
public static void main(String []args){
x = 1;
y = 2;
while(count < 10){
while(x>0 && x<z){
z = Math.cbrt(Math.pow(x,3) + Math.pow(y,3) - 1);
if(z == (int)z && x<z){
System.out.println("x = " + x + " y = " + y + " z = " + (int)z);
count ++;
}
x++;
}
//z= y+1;
}
}
}
可以给出解决方法吗?谢谢 展开
import java.util.*;
public class ThreesX{
static int x;
static int y;
static int count =0;
static double z;
public static void main(String []args){
x = 1;
y = 2;
while(count < 10){
while(x>0 && x<z){
z = Math.cbrt(Math.pow(x,3) + Math.pow(y,3) - 1);
if(z == (int)z && x<z){
System.out.println("x = " + x + " y = " + y + " z = " + (int)z);
count ++;
}
x++;
}
//z= y+1;
}
}
}
可以给出解决方法吗?谢谢 展开
3个回答
展开全部
我改写了下楼主的代码..基本可以实现,但是效率不高,再加之本人的电脑较慢.在算出5组后,放弃(-_|||)但基本思想应该是符合楼主需要的..
代码如下:
import java.util.Set;
import java.util.TreeSet;
public class ThreesX {
private static class Function implements Comparable<Function> {
private double x;
private double y;
private double z;
public Function(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
@Override
public int compareTo(Function arg0) {
// TODO Auto-generated method stub
if (arg0.x - this.x < 0) {
return 1;
} else if (arg0.x - this.x > 0) {
return -1;
} else
return 0;
}
@Override
public String toString() {
return "x = " + (int) x + " y = " + (int) y + " z = " + (int) z
+ "\n";
}
}
public static void main(String[] args) {
double x;
double y;
double z;
int count = 0;
Function f;
Set<Function> set = new TreeSet<Function>();
for (z = 2;; z++) {
for (y = 1; y < z; y++) {
for (x = 0; x < y; x++) {
double resultLeft = Math.pow(x, 3) + Math.pow(y, 3);
double resultRight = Math.pow(z, 3) + 1;
if (resultLeft == resultRight) {
f = new Function(x, y, z);
System.err.println(f);
set.add(f);
count++;
}
if (count == 5) { System.err.println(set);
return;
}
}
}
}
}
}
我在其中新加入了一个静态局部类Function类,里面保存x,y,z,重写了比较方法compareTo以方便排序
在程序中用set会依据其中对象的compareTo方法的结果排序,因此用Function保存每个合适的的x,y,z,然后利用打印set时会自动依照compareTo的结果进行排序,以实现按照x的增长排序.
依然最多算到第六个数,因为随着z的增大,程序的复杂度会逐渐增加,目前知道的1000以内的符合楼主要求的数只有6组.楼主可以用5,或者6对程序进行下测试.应该是无误的.
以上.
代码如下:
import java.util.Set;
import java.util.TreeSet;
public class ThreesX {
private static class Function implements Comparable<Function> {
private double x;
private double y;
private double z;
public Function(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
@Override
public int compareTo(Function arg0) {
// TODO Auto-generated method stub
if (arg0.x - this.x < 0) {
return 1;
} else if (arg0.x - this.x > 0) {
return -1;
} else
return 0;
}
@Override
public String toString() {
return "x = " + (int) x + " y = " + (int) y + " z = " + (int) z
+ "\n";
}
}
public static void main(String[] args) {
double x;
double y;
double z;
int count = 0;
Function f;
Set<Function> set = new TreeSet<Function>();
for (z = 2;; z++) {
for (y = 1; y < z; y++) {
for (x = 0; x < y; x++) {
double resultLeft = Math.pow(x, 3) + Math.pow(y, 3);
double resultRight = Math.pow(z, 3) + 1;
if (resultLeft == resultRight) {
f = new Function(x, y, z);
System.err.println(f);
set.add(f);
count++;
}
if (count == 5) { System.err.println(set);
return;
}
}
}
}
}
}
我在其中新加入了一个静态局部类Function类,里面保存x,y,z,重写了比较方法compareTo以方便排序
在程序中用set会依据其中对象的compareTo方法的结果排序,因此用Function保存每个合适的的x,y,z,然后利用打印set时会自动依照compareTo的结果进行排序,以实现按照x的增长排序.
依然最多算到第六个数,因为随着z的增大,程序的复杂度会逐渐增加,目前知道的1000以内的符合楼主要求的数只有6组.楼主可以用5,或者6对程序进行下测试.应该是无误的.
以上.
展开全部
while(count < 10){
while(x>0 && x<z){
出现了死循环了!
while(x>0 && x<z){
出现了死循环了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(x>0 && x<z)
Z没有赋值 默认是0
所以这个while进不去, 所以一直在while(count<10){}这个循环里
Z没有赋值 默认是0
所以这个while进不去, 所以一直在while(count<10){}这个循环里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询