欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java算法(一)

程序员文章站 2022-12-22 18:31:38
【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 具体分析如下: 分析:从第一个兔子开始,第1个月1只兔子,由于“ ......

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

具体分析如下:

分析:从第一个兔子开始,第1个月1只兔子,由于“长到第三个月后每个月又生一只兔子”,所以第2个月也是1只兔子,第3个月时可以生一只兔子,所以总数为2只,这时,其中有一只是以后每个月都可以生一只兔子的老兔子,另一只是一只新兔子,它只有在第三个月的时候才可以每个月生一只兔子;这样的话,第4个月的兔子总数为3只,…以此类推。

很容易可以看出小兔子的数量符合菲波那切数列;

解法一:

    int sum;//每月的兔子总数
        int a = 1;//第一个月的兔子数
        int b = 1;//第二个月的兔子数
        for (int i = 3; i <= 12; i++) {
            sum = b + a;
            b = a;
            a = sum;
      System.out.println("第" + i + "个月的兔子总是为:" + sum);
        }

解法二:
//递归方法实现
public class A01 {
public static void main(String args[]) {
for (int i = 1; i <= 20; i++)
System.out.println(F(i));
} public static int F(int month){ if(month == 1 || month == 2){ return 1; }else return F(month-1)+F(month-2); }
【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。


public class A02 {


public static void main(String[] args) {
for(int i=100;i<201;i++) {
boolean flag = true;
for(int j=2;j<i;j++) {
if(i%j==0) {
flag = false;
break;
}
}
if(!flag) {
continue;
}
System.out.println(i+"是素数");
}
}
}

【程序3】 题目:打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,
其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。


public class A03 {


public static void main(String[] args) {
System.out.println("100到1000中秋水仙数为:");
for(int i=100;i<1000;i++) {
int b = i/100;
int s = (i%100)/10;
int g = i%10;
if(i==b*b*b+s*s*s+g*g*g) {

System.out.println(i);
}
}
}

【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 
程序分析:对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n > i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数你,重复执行第一步。
(3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步


import java.util.Scanner;
public class A04 {

public void fenjie(int n) {

for (int i = 2; i <= n; i++) {

if (n % i == 0) {
System.out.print(i);
if(n!=i){
System.out.print("*");
}
fenjie(n/i);
}
} System.exit(0);

}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入N的值:");
int N = in.nextInt();
System.out.print( "分解质因数:" + N +"=");
new A04().fenjie(N);
}
}

【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。


import java.util.Scanner;

public class A05 {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入成绩:");
int num = in.nextInt();
/*第一种

if(num>=90) {
System.out.println("A");
}
else if(num>=60&&num<=89) {
System.out.println("B");
}
else if(num>=0&&num<=59) {
System.out.println("C");
}
else {
System.out.println("输入错误");
}*/

//第二种
System.out.println( (num>=90)?"A":((num>59)?"B":"C"));
}
}

【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

import java.util.Scanner;
public class A06 {
public static void main(String[] args){
int a,b,m,n;
Scanner in=new Scanner(System.in);
System.out.println("请输入一个正整数:");
a=in.nextInt();
System.out.println("再输入一个正整数:");
b=in.nextInt();
A use=new A();
m=use.commonDivisor(a,b);
n=a*b/m;
System.out.println("最大公约数:"+m);
System.out.println("最小公倍数:"+n);
}
}
class A{
public int commonDivisor(int x,int y){
if(x<y){
int t=x;
x=y;
y=t;
}
while(y!=0){
if(x==y)return x;
else{
int k=x%y;
x=y;
y=k;
}
}
return x;
}
}

【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用for循环语句,if条件语句。

import java.util.Scanner;


public class A07 {
public static void main(String[] args){
System.out.println("请输入一个字符串;");
Scanner in=new Scanner(System.in);
String str=in.nextLine();
char[] ch=str.toCharArray();
count s=new count();
s.count(ch);
}
}
class count{
int SHUZI,ZIMU,KONGGE,QITA;
public void count(char[] arr){
for(int i=0;i<arr.length;i++){
if(arr[i]>='0'&&arr[i]<='9'){
SHUZI++;
}else if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')){
ZIMU++;
}else if(arr[i]==' '){
KONGGE++;
}else{
QITA++;
}
}
System.out.println("数字个数:"+SHUZI);
System.out.println("英文字母个数:"+ZIMU);
System.out.println("空格个数:"+KONGGE);
System.out.println("其他字符个数:"+QITA);
}
}


【程序8】 题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。
例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制。

import java.util.Scanner;
public class A08 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入a的值:");
int a = in.nextInt();
System.out.println("请输入n个数:");
int n = in.nextInt();
int s = 0,t=0;
for (int i = 1; i <= n; i++) {
t += a;
a = a*10;
s += t;
}
System.out.println(s);
}
}