初步做了一个出来,但是效率并不是很高,前100个计算速度族乱返还可以,但是往后就很慢了。如果什么时候有空的话可以再看看,先给你代码吧,不知道能不能帮上你
public class AlisandaNumber {private static final int MAX_INDEX = 1000 // 可以先把这个常量改为1-6,验证正确性
public static void main(String[] args) {
int a = 0
int index = 0
while(index < MAX_INDEX) {
a += 6 陪缺// 每次循环自增6,由题目规律可知A是6的倍数
boolean breakOut = false
// 最兆饥大的约数为此数的平方根,因为如果是两个平方根相乘的话,剩下的就只有1了
int maxNum = (int) Math.ceil(Math.sqrt(a))
p:
for(int p = 1 p <= maxNum p ++) {
if(a % p != 0) {
continue // 如果不是约数的话,没必要考虑,下同
}
// 最大约数为平方根的相反数,原理同上
maxNum = (int) Math.ceil(Math.sqrt(a / p))
for(int q = -1 q >= -maxNum q --) { // q和r必为负数
if(a % q != 0) {
continue
}
int r = a / (p * q)
int nonZero = p * q + p * r + q * r
if (nonZero == 0) {
continue
}
if((a == p * q * r) && (a == (p * q * r) / (nonZero))) {
index ++
breakOut = true
break p // 跳出外层循环
}
}
}
if(breakOut) {
System.out.println(String.format("第%d个压力山大数是%d", index, a))
}
}
}
}
int x = 0while(true)
{
x++
if(x == 10)
x = 0
System.out.println(x)
}
}
一判游答楼的应该是在磨弊1-10之间掘慧循环
这一句是把还在圈里的进行报数. .. 如果你放在后面的话...有可能那个人辩歼已经不在圈里了 但是你先执行了leftCount-- 就会出错 导致while循环提前退出if (people[index] == true)
baoShu++
比如说 1 2 3 4 5 第3个人已经是false 了 你第二轮的时候没有先判断羡灶激他是不是false 直接 leftCount就--了 就兄袜出错了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)