
正文
java算法题代码 java算法难题
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java简单算法问题
初步做了一个出来,但是效率并不是很高,前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));
}
}
}
}
相关问答
Q1: 一道java算法题提供了正确代码,不知道是不是我理解错误运行结果并不是最大值?
首先理解下题意,关键是连续的子数组,比如{1,2,-1} ,连续的子数组包括{1}、{2}、{-1}、{1,2}、{2,-1}、{1,2,-1}
其次是求各子数组和的最大值,上面的算法求最大值分两部分,循环遍历所有值
curSum :用于某一个子数组的累加和
curMaxSum:用于记录历史最大累加和
上面算法的start和end其实没用,本意是找出具体子数组,但上面算法部分情况下是无法实现的
@Test
public void test(){
// int[] num = {1,-2,3,10,-4,7,2,-5};
//int[] num = {1,-2,3,10,-4,10,2,-5};
int[] num = {-1,-2,3,4,-5,-6,-7};
System.out.println(maxSum(num));
}
public int maxSum(int[] num){
int curSum = 0;
int curMaxSum = -99999999;
int finalStart = 0;
int finalEnd = 0;
int start = 0;
for(int i=0;inum.length;i++){
if(curSum=0){
curSum = num[i];
start = i;
}
else{
curSum += num[i];
}
if(curSumcurMaxSum){
finalStart = start;
finalEnd = i;
curMaxSum = curSum;
}
}
for(int i = finalStart;i=finalEnd;i++){
System.out.println(num[i]);
}
return curMaxSum;
}
Q2: Java算法题:判断并输出101-200中所有素数,代码中单等号与双等号的区别?
这是很基础的问题
单= 是赋值运算, 把后面的值赋值给前面的参数
双= 是关系运算, 比较前后两个参数是否相同
注意如果???处, 用单等, 就是赋值运算, 将ture 赋值 给 flag, 所以if中会一直是true, 也会一直执行if中的代码
双== 就是比较了啊, 结果是真 才会执行if中代码
Q3: Java用查找算法的一段代码如下: 其中boolean A=false; if(name.equals(arr[i])) 麻烦解释一下 尽量直白
数组从第一个开始比较,完全相同(当前数组值和输入值一模一样)A就赋值为true;不一样A的值不变
Q4: java中排序算法代码
package temp;
import sun.misc.Sort;
/**
* @author zengjl
* @version 1.0
* @since 2007-08-22
* @Des java几种基本排序方法
*/
/**
* SortUtil:排序方法
* 关于对排序方法的选择:这告诉我们,什么时候用什么排序最好。当人们渴望先知道排在前面的是谁时,
* 我们用选择排序;当我们不断拿到新的数并想保持已有的数始终有序时,我们用插入排序;当给出的数
* 列已经比较有序,只需要小幅度的调整一下时,我们用冒泡排序。
*/
public class SortUtil extends Sort {
/**
* 插入排序法
* @param data
* @Des 插入排序(Insertion Sort)是,每次从数列中取一个还没有取出过的数,并按照大小关系插入到已经取出的数中使得已经取出的数仍然有序。
*/
public int[] insertSort(int[] data) {
1/11页
int temp;
for (int i = 1; i data.length; i++) {
for (int j = i; (j 0) (data[j] data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
return data;
}
/**
* 冒泡排序法
* @param data
* @return
* @Des 冒泡排序(Bubble Sort)分为若干趟进行,每一趟排序从前往后比较每两个相邻的元素的大小(因此一趟排序要比较n-1对位置相邻的数)并在
* 每次发现前面的那个数比紧接它后的数大时交换位置;进行足够多趟直到某一趟跑完后发现这一趟没有进行任何交换操作(最坏情况下要跑n-1趟,
* 这种情况在最小的数位于给定数列的最后面时发生)。事实上,在第一趟冒泡结束后,最后面那个数肯定是最大的了,于是第二次只需要对前面n-1
* 个数排序,这又将把这n-1个数中最小的数放到整个数列的倒数第二个位置。这样下去,冒泡排序第i趟结束后后面i个数都已经到位了,第i+1趟实
* 际上只考虑前n-i个数(需要的比较次数比前面所说的n-1要小)。这相当于用数学归纳法证明了冒泡排序的正确性
Q5: java报数算法题
这一句是把还在圈里的进行报数. .. 如果你放在后面的话...有可能那个人已经不在圈里了 但是你先执行了leftCount-- 就会出错 导致while循环提前退出
if (people[index] == true)
baoShu++;
比如说 1 2 3 4 5 第3个人已经是false 了 你第二轮的时候没有先判断他是不是false 直接 leftCount就--了 就出错了
关于java算法题代码和java算法难题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







