JAVA 基础算法学习(一)
撰写此文目的在于分享java学习过程中的收获与体会,本文分享六个基本算法的java语言实现。
- 质数的判断 ;
- 最大公约数和最小公倍数的求解 ;
- Fibonacci数列1经典问题 ;
- 字符统计问题;
- 小球下落问题;
- 数字相加问题;
1.质数的判断
public class prim_num {
public static void main(String[] args) {
int count=0; //计数器,注意初始化
for(int i=101;i<1000;i++) {
boolean b=false; //标志变量,注意初始化
for(int j=2;j<i/2;j++) {
if(i%j==0) {
b=false;
break;
}
else {
b=true;
}
}
if(b) {
count++;
System.out.println(i);
}
}
System.out.println(count);
}
}
2.最大公约数和最小公倍数的求解
输入两个正整数m和n,求其最大公约数和最小公倍数。
欧几里德算法(辗转相除法):
两个整数的最大公约数等于其中较小的那个数和两个数的相除余数的最大公约数。
最小公倍数=两数的乘积/最大公约数
import java.util.Scanner;
public class gcd {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("Please input your firsr integer:");
int a=scan.nextInt();
System.out.println("Please input your second integer:");
int b=scan.nextInt();
int pro=a*b;
if(a<b) {
a=a+b;
b=a-b;
a=a-b;
} //确保被除数a大于除数b
while(b!=0) {
int r=a%b;
a=b;
b=r;
}
int t=pro/a;
System.out.println("最大公约数为:"+a);
System.out.println("最小公倍数为:"+t);
}
}
3.Fibonacci数列经典问题
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
经过月数 | 总体对数 |
---|---|
0 | 1 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 5 |
6 | 8 |
F(n)=F(n-1)+F(n-2) (n>2)
import java.util.Scanner;
public class Fibonacci {
public static void main(String[] args) {
long c1=1;
long c2=1;
long temp;
Scanner input=new Scanner(System.in);
int month=input.nextInt();
for(int i=1;i<=month;i++) {
if(i==1) {
System.out.println(c1);
continue;
}
if(i==2) {
System.out.println(c2);
continue;
}
else {
temp=c2;
c2=c1+c2;
c1=temp;
System.out.println(c2);
}
}
}
}
4.字符统计问题
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
import java.util.Scanner;
public class Count {
public static void main(String[] args) {
int chactra=0,blak=0,num=0,other=0;
Scanner scan=new Scanner(System.in);
String result=scan.nextLine();
char s[]=result.toCharArray();
for(int i=0;i<s.length;i++) {
if(Character.isLetter(s[i])) {
chactra++;
continue;
}
if(Character.isSpace(s[i])) {
blak++;
continue;
}
if(Character.isDigit(s[i]))num++;
else {
other++;
System.out.println(s[i]);
}
}
System.out.println("英文字母个数:"+chactra);
System.out.println("空格个数"+blak);
System.out.println("数字个数"+num);
System.out.println("其他字符个数"+other);
}
}
5.小球下落问题
一球从100m高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反跳多高?
public class ten_back {
public static void main(String[] args) {
// TODO Auto-generated method stub
double s=100;
double h=50;
int i;
for(i=2;i<10;++i) {
s+=h*2;
h=h/2;
}
System.out.println("第"+i+"次经过路程"+s+"弹跳高度"+h);
}
}
6.数字相加问题
求s=a+aa+aaa+aaaa+aa. . .a的值,其中a是一个数字。例如,2+2+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
思路分析:
1.接受一个数表示累加的位数
2.接受从键盘输入的一个数(数字只能是1-9之间的数)
3.例如,输入4 , 5 则s=5+55+555+5555
4.输入4 则s=a+aa+aaa+aaaa
import java.util.Scanner;
public class Sum {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("Please input your times:");
int times=scanner.nextInt();
System.out.println("Please input your number:");
int num=scanner.nextInt();
double temp=0.0;
double sum=0.0;
for(int i=0;i<times;i++) {
temp+=num;
sum+=temp;
num=num*10;
}
System.out.println("结果为:"+sum);
}
}