「java常见算法题」java算法基础题
本篇文章给大家谈谈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算法题
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常见算法题的信息别忘了在本站进行查找喔。
发布于:2023-01-10,除非注明,否则均为
原创文章,转载请注明出处。