Java简单算法问题

Java简单算法问题,第1张

初步做了一个出来,但是效率并不是很高,前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 = 0

while(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就--了 就兄袜出错了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/12360317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存