5道Java算法编程题(二)

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

1.程序分析:利用辗除法。

import java.util.Scanner;

public class Demo06 {

         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();

                   commonDivisor use=new commonDivisor();

                   m=use.commonDivisor(a,b);

                   n=a*b/m;

                   System.out.println("最大公约数:"+m);

                   System.out.println("最小公倍数:"+n);

         }

}

class commonDivisor{

         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 Demo07 {

         public static void main(String[] args){

                   System.out.println("请输入一个字符串:");

                   Scanner in=new Scanner(System.in);

                   String str=in.nextLine();

                   char[] ch=str.toCharArray();

                   count use=new count();

                   use.count(ch);

         }

}

class count{

         int digital,character,blank,other;

         public void count(char[] arr){

                   for(int i=0;i<arr.length;i++){

                            if(arr[i]>='0'&&arr[i]<='9'){

                                     digital++;

                            }else if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')){

                                     character++;

                            }else if(arr[i]==' '){

                                     blank++;

                            }else{

                                     other++;

                            }

                   }

                   System.out.println("数字个数:"+digital);

                   System.out.println("英文字母个数:"+character);

                   System.out.println("空格个数:"+blank);

                   System.out.println("其他字符个数:"+other);

         }

}

 

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

1.程序分析:关键是计算出每一项的值。

import java.util.Scanner;

public class Demo08 {

         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);

         }

}

 

【程序9   题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=123。编程找出1000以内的所有完数。

public class Demo09 {

         public static void main(String[] args) {

                   int s;

                   for (int i = 1; i <= 1000; i++) {

                            s = 0;

                            for (int j = 1; j < i; j++)

                                     if (i % j == 0)

                                               s = s + j;

                            if (s == i)

                                     System.out.print(i + " " );

                   }

                   System.out.println();

         }

}

public class Demo09{

         public static void main(String[] args) {

                   int i,j,sum;         

                   for(i=1;i<1000;i++) 

                   {

                            sum = 0;         

                            for(j=1;j<=i/2;j++)  

                            {

                                     if(i%j==0)        

                                     {

                                               sum+=j;       

                                     }

                            }

                            if(sum==i)           

                            {

                                     System.out.print(i+" its factors are:   ");      

                                     for(j=1;j<=i/2;j++)                         

                                     {

                                               if(i%j==0)                                 

                                                        System.out.print(j+", ");

                                     }

                                     System.out.println();

                            }

                   }

         }

}

 

【程序10 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

public class Demo10 {

         public static void main(String[] args) {

                   double s = 0;

                   double h = 100;

                   for (int i = 1; i <= 10; i++) {

                            s += h;

                            h = h/2;

                            s += h;

                   }

                   System.out.println("经过路程:"+s);

                   System.out.println("反弹高度:"+h);

         }

}

the end

评论(0)