问题:
自然数的平方数是:1 4 9 16 25 …
自然数的立方数是:1 8 27 64 125 …
自然数的4次方数是:1 16 81256 …
…
这些数字都可以称为次方数。
1~10000中,去掉所有的次方数,还剩下多少个数字?
我就想问我的程序哪里思路不对
import java.util.Arrays;
public class Example5 {
public static void main(String args[]){
int i, j = 2, k = 0, add = 1, b = 0;
double a[] = new double [10000];
for(i = 2; Math.pow(i, j) < 10001; i ++){
for(j = 2; Math.pow(i, j) < 100001; j ++, k ++){
a[k] = Math.pow(i, j);
}
j = 2;
}
Arrays.sort(a);
for (i = b; i < a.length; i ++)
for(j = b + 1; j < a.length; j++)
if(a[i] != a[j]){
add = add + 1;
b = j;
break;
}
System.out.println("除去自然数在1~10000之间的次方数后,总数为" + (10000 - add));
}
}
a[0] 的值是0 ,所以add的初始值应该设置0
判断出来a[i]!=a[j]之后,从a[i]到a[j]的值都是相同的,这时候应该让 i=j-1;否则万一a[i+1]=a[i],这里判断的时候i从i+1开始,j却从上次结束的地方开始,结果就不符合了
按你所说的修改。结果不对啊
追答int i, j = 2, k = 0, add = 0, b = 0;
double a[] = new double [10000];
for(i = 2; Math.pow(i, j) < 10001; i ++){
for(j = 2; Math.pow(i, j) < 100001; j ++, k ++){
a[k] = Math.pow(i, j);
}
j = 2;
}
Arrays.sort(a);
System.out.println(a.length);
for (i = b; i < a.length; i ++)
for(j = b + 1; j < a.length; j++)
if(a[i] != a[j]){
add = add + 1;
// b = j;
i = j-1;
b=j;
System.out.println("["+i+"]"+a[i]+"--"+a[j]+"["+j+"]");
break;
}
System.out.println("除去自然数在1~10000之间的次方数后,总数为" + (10000 - add));
}
你试一下,结果是 9839吗?
9875
追答你看一下打印出来的数据,哪个是不符合的?
追问求QQ,
追答发现了 上面你写成了 1000001,不过改了之后我算出来结果是 9876
第一部分是10001的,我写错的,因为第一部分的次方数有重复的,第二部分比较是否有相同的,我知道set可以,我就想试试这方法。第二部分的for前面进行了排序,如果有相同的,肯定在一起,所以可以进行比较,求QQ,。。
追答public static void main(String[] args) {
int i, j = 2, k = 0, add = 1, b = 0;
double a[] = new double [10000];
Set set = new HashSet();
for(i = 2; Math.pow(i, j) < 10001; i ++){
for(j = 2; Math.pow(i, j) < 10001; j ++, k ++){
if (Math.pow(i,j) < 10001) {
set.add(Math.pow(i, j));
}
}
j = 2;
}
System.out.println("除去自然数在1~10000之间的次方数后,总数为" + (10000 - set.size() - 1));//额外排除掉1
// Arrays.sort(a);
// for (i = b; i < a.length; i ++)
// for(j = b + 1; j < a.length; j++)
// if(a[i] != a[j]){
// add = add + 1;
// b = j;
// break;
// }
}
在上班没有办法帮你仔细看了,调整一下你看看这个结果对不对
所以我下面用了一个排序,把相同的数凑在一起,然后用第二个for循环区分,但结果不对
是啊。我想问我这程序为啥错啊,亲
追答package test;我知道有很多方法,我就想问下我的思路哪里错了,哥。。