「java常见算法题」java算法基础题

博主:adminadmin 2023-01-10 11:33:07 59

本篇文章给大家谈谈java常见算法题,以及java算法基础题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java十大算法

算法一:快速排序算法

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1 从数列中挑出一个元素,称为 "基准"(pivot),

2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

算法二:堆排序算法

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:

创建一个堆H[0..n-1]

把堆首(最大值)和堆尾互换

3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置

4. 重复步骤2,直到堆的尺寸为1

算法三:归并排序

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置

3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4. 重复步骤3直到某一指针达到序列尾

5. 将另一序列剩下的所有元素

「java常见算法题」java算法基础题

java算法题

public class Monkey

{

public static void main(String[] args)

{

int sum=0,remain=1;

//每天吃剩的桃子加一个正好是前一天桃子的一半,每天桃子的总数就是前一天剩下桃子的数量

for(int day=9;day=1;day--)

{

sum=(remain+1)*2;

remain=sum;

System.out.println("第"+day+"天还剩"+remain+"个桃子");

}

System.out.println(sum);

}

}

关于java算法编程的问题,输入成绩,判断每门课得分的范围是否合理,输入时候用空格分割,

一、题目分析:

要计算每个学生的平均成绩,需要获取如下信息:

1、学生总数;

2、科目数;

3、每个学生每科的成绩。

然后累加每个学生的总分,并计算总成绩。

二、算法设计:

1、输入学生总数;

2、输入科目数;

3、对于每个学生,输入各科成绩,计算总分及平均分,保存平均分值。

4、输出结果。

三、参考代码:

#include stdio.h

#include stdlib.h

int main()

{

int n, m;

float *p;

int i,j;

scanf("%d%d",n,m);//输入学生总数n和学科总数m。

p = (float *)malloc(sizeof(float)*n);//申请空间以存储平均分。

for(i = 0; i n; i ++)

{

p[i] = 0;//初始为0.

for(j = 0; j m; j ++)//输入每个学生每科成绩。

{

float t;

scanf("%f",t);

p[i]+=t;//累加获得总分。

}

p[i]/=m;//计算平均分。

}

for(i = 0; i n; i ++)//输出结果。

printf("%f\n", p[i]);

free(p);//释放内存。

return 0;

}

java算法题。小菜鸟的大问题。面试题。

帮你写出来了:用 欧几里得最大公约数 算法,然后判断:

如果分子 = 分母或者 gcd 结果 b 值不是 1 就不是最简真分数,否则就是。

我这个用正则表达式先判断输入格式了。

---------------------------------------------------------------

import java.util.regex.Pattern;

import java.io.*;

public class Demo {

public static void main (String args[]) throws IOException {

Pattern regex = Pattern.compile("[0-9]*/[0-9]*");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String num = "";

while (!(num = br.readLine()).equals("-1")) {

if (!regex.matcher(num).matches()) {

System.out.println("格式不正确,请重新输入!");

continue;

}

int a = Integer.parseInt(num.substring(0, num.indexOf('/')));

int b = Integer.parseInt(num.substring(num.indexOf('/')+1));

if (a = b || !isRelativelyPrime(a, b))

System.out.println(num + "不是最简真分数");

else

System.out.println(num + "是最简真分数");

}

}

private static boolean isRelativelyPrime (int a, int b) {

int tmp = 0;

while (a  0) {

tmp = b % a;

b = a;

a = tmp;

}

if (b == 1)

return true;

else

return false;

}

}

----------------------------- 运行结果 -------------------------------

java常见算法题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java算法基础题、java常见算法题的信息别忘了在本站进行查找喔。

The End

发布于:2023-01-10,除非注明,否则均为首码项目网原创文章,转载请注明出处。