黑马程序员技术交流社区

标题: JAVA的几个经典编程题——看看你会做吗 [打印本页]

作者: Jackron    时间: 2015-7-7 00:24
标题: JAVA的几个经典编程题——看看你会做吗
【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
  
public class  Prog6{
  
    public static void main(String[] args){
  
        int m,n;
  
        try{
  
            m = Integer.parseInt(args[0]);
  
            n = Integer.parseInt(args[1]);
  
        }catch(ArrayIndexOutOfBoundsException  e){
  
            System.out.println("输入有误");
  
            return;
  
        }
  
        max_min(m,n);
  
    }
  
    //求最大公约数和最小公倍数
  
    private static void max_min(int m, int n){
  
        int temp = 1;
  
        int yshu = 1;
  
        int bshu = m*n;
  
        if(n<m){
  
            temp = n;
  
            n = m;
  
            m = temp;
  
        }
  
        while(m!=0){
  
            temp = n%m;
  
            n = m;
  
            m = temp;
  
        }
  
        yshu = n;
  
        bshu /= n;
  
        System.out.println(m+"和"+n+"的最大公约数为"+yshu);
  
        System.out.println(m+"和"+n+"的最小公倍数为"+bshu);
  
    }
  
}
  
【程序7】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用while语句,条件为输入的字符不为'\n'.
  
import  java.util.Scanner;
  
public class  Prog7_1{
  
    public static void main(String[] args){
  
        System.out.print("请输入一串字符:");
  
        Scanner scan = new Scanner(System.in);
  
        String str = scan.nextLine();//将一行字符转化为字符串
  
        scan.close();
  
        count(str);
  
    }
  
    //统计输入的字符数
  
    private static void count(String str){
  
        String E1 =  "[\u4e00-\u9fa5]";//汉字
  
        String E2 = "[a-zA-Z]";
  
        String E3 = "[0-9]";
  
        String E4 = "\\s";//空格
  
        int countChinese = 0;
  
        int countLetter = 0;
  
        int countNumber = 0;
  
        int countSpace = 0;
  
        int countOther = 0;
  
        char[] array_Char =  str.toCharArray();//将字符串转化为字符数组
  
        String[] array_String = new  String[array_Char.length];//汉字只能作为字符串处理
  
        for(int  i=0;i<array_Char.length;i++)
  
           array_String = String.valueOf(array_Char);
  
        //遍历字符串数组中的元素
  
        for(String s:array_String){
  
            if(s.matches(E1))
  
               countChinese++;
  
            else if(s.matches(E2))
  
               countLetter++;
  
            else if(s.matches(E3))
  
               countNumber++;
  
            else if(s.matches(E4))
  
               countSpace++;
  
            else
  
               countOther++;
  
        }
  
        System.out.println("输入的汉字个数:"+countChinese);
  
        System.out.println("输入的字母个数:"+countLetter);
  
        System.out.println("输入的数字个数:"+countNumber);
  
        System.out.println("输入的空格个数:"+countSpace);
  
        System.out.println("输入的其它字符个数:"+countSpace);
  
    }
  
}
  
import  java.util.*;
  
public class  Prog7_2{
  
    public static void main(String[] args){
  
       System.out.println("请输入一行字符:");
  
       Scanner scan = new Scanner(System.in);
  
       String str = scan.nextLine();
  
       scan.close();
  
       count(str);
  
    }
  
    //统计输入的字符
  
    private static void count(String str){
  
        List<String> list = new  ArrayList<String>();
  
        char[] array_Char = str.toCharArray();
  
        for(char c:array_Char)
  
           list.add(String.valueOf(c));//将字符作为字符串添加到list表中
  
        Collections.sort(list);//排序
  
        for(String s:list){
  
            int begin = list.indexOf(s);
  
            int end = list.lastIndexOf(s);
  
            //索引结束统计字符数
  
            if(list.get(end)==s)
  
               System.out.println("字符‘"+s+"’有"+(end-begin+1)+"个");
  
        }
  
    }
  
}
【程序8】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。
  
import  java.util.Scanner;
  
  
public class  Prog8{
  
    public static void main(String[] args){
  
        System.out.print("求s=a+aa+aaa+aaaa+...的值,请输入a的值:");
  
        Scanner scan = new  Scanner(System.in).useDelimiter("\\s*");//以空格作为分隔符
  
        int a = scan.nextInt();
  
        int n = scan.nextInt();
  
        scan.close();//关闭扫描器
  
        System.out.println(expressed(2,5)+add(2,5));
  
    }
  
    //求和表达式
  
    private static String expressed(int a,int  n){
  
        StringBuffer sb = new StringBuffer();
  
        StringBuffer subSB = new  StringBuffer();
  
        for(int i=1;i<n+1;i++){
  
           subSB = subSB.append(a);
  
           sb = sb.append(subSB);
  
           if(i<n)
  
             sb = sb.append("+");
  
        }
  
        sb.append("=");
  
        return sb.toString();
  
    }
  
    //求和
  
    private static long add(int a,int n){
  
        long sum = 0;
  
        long subSUM = 0;
  
        for(int i=1;i<n+1;i++){
  
            subSUM = subSUM*10+a;
  
            sum = sum+subSUM;
  
        }
  
        return sum;
  
    }
  
}
  
【程序9】
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
  
public class  Prog9{
  
    public static void main(String[] args){
  
        int n = 10000;
  
        compNumber(n);
  
    }
  
    //求完数
  
    private static void compNumber(int n){
  
        int count = 0;
  
        System.out.println(n+"以内的完数:");
  
        for(int i=1;i<n+1;i++){
  
            int sum = 0;
  
            for(int j=1;j<i/2+1;j++){
  
                if((i%j)==0){
  
                    sum += j;
  
                    if(sum==i){
  
                  System.out.print(i+" ");
  
                  if((count++)%5==0)
  
                    System.out.println();
  
                 }
  
                }
  
            }
  
        }
  
    }
  
}
  

作者: luorenyu    时间: 2015-7-7 01:29
真不懂哈哈!
作者: weiyuning    时间: 2015-7-27 23:57
刚学第一天
作者: 王竹根    时间: 2015-7-28 20:52
谢谢分享。。我学习一下把。。。
作者: 18671183990    时间: 2015-7-28 21:03
神马是最小公倍数?
作者: zhaoyue    时间: 2015-7-28 21:18
刚学java常用类有的还不懂 ,留下 过两天学过了看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2