两个数的最大公约数
学过算法的都知道,可以通过欧几里得算法直接可以求出,现在来回顾一下这个算法
先来看一下代码:
import java.util.Scanner;
public class E {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int p=scan.nextInt();
int q=scan.nextInt();
System.out.println(a(p,q));
}
public static int a(int p,int q) {
if(q==0) {
return p;
}
int r=p%q;
return a(p,r);
}
}
这就是通过欧几里得算法的过程,代码量是不是少多了,并且容易理解了
字符串和整形的转化
这是个比较简单问题了,有很多种解决方法,可以根据自己的习惯去!
整形转化成字符型:
- 通过“+”这个特殊的东西
+在java中可以是运算符号,同样还是连接符号,可以通过这个特性来完成,比较简单的一种
int a=123;
String b=a+""; //就可以完成
- 通过Integer这个类来完成
Integer 类中有toString这样一个方法
int a=123;
String b=Integer.toString(a);//也可以完成
字符型转化整形:
- 通过Integer类库里的一个方法
String a="123";
int b=Integer.parseInt(a); //可以完成功能
方法还有很多,根据自己的喜好
随机数的产生
这是一个比较简单的了!
Math.random()*a; //随机产生一个0-a的随机数,
//这里要注意的是通过Math产生的随机数是double类型的
Math,random()*(b-a)+(a); //返回a到b的随机数,这个是Random类里不能做到的
b和a同样可是字符类型
排序
排序是算法中比较重要的一个东西了
假如有一个数组长度为N,但选择排序不是很稳定
选择排序是从这一个数组中,找到一个最小值,与第一个值进行交换,然后找一个次小值与第二个交换,所以选择排序一共需要交换N次,比较N²/2次,比较次数比冒泡排序要少的多,选择排序适合比较少量的数据
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int a[]=new int[5];
Scanner scan=new Scanner(System.in);
for(int i=0;i<a.length;i++) {
a[i]=scan.nextInt();
}
sort(a);
for(int n:a) {
System.out.println(n);
}
}
public static void sort(int a[]) {
for(int i=0;i<a.length;i++) {
int m; //用于后面的交换
int min=i; //给哪一个索引位置到对应的数
for(int j=min;j<a.length;j++) {
if(a[min]>=a[j]) {
m=a[min];
a[min]=a[j];
a[j]=m;
}
}
}
}
}
这就是选择排序的主要代码,思路比较清晰,不会迷糊比较好理解
插入排序,是从数组的第二个索引开始,在这个索引的左边排序,然后下一次循环取第三个索引,继续在这个索引左侧排序,保持左侧是已排序右侧未排序
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int a[]=new int[5];
Scanner scan=new Scanner(System.in);
for(int i=0;i<a.length;i++) {
a[i]=scan.nextInt();
}
sort(a);
for(int n:a) {
System.out.println(n);
}
}
public static void sort(int a[]) {
int j;
for(int i=1;i<a.length;i++) {
int m=a[i];
for(j=i-1;j>=0&&a[j]>m;j--) {
//假如将要排序的这个数是左侧最大的,则不需要排序,直接放在就可以
a[j+1]=a[j];
}
a[j+1]=m; //将m插入进来
}
}
}
还有几个排序算法没有总结,下篇继续!!!