代码改变世界

java算法(二)

2014-04-18 15:44  大额_skylar  阅读(368)  评论(0编辑  收藏  举报

四、最小公倍数最大公约数问题:

      分析:两个数的最小公倍数等于两个数相乘再除以他们的最大公约数,因此只要求出最大公约数就可以啦。

 

 

package JingDian;

public class yuebeishu {
    //用来求最大公约数的函数(debug看结果吧,好巧妙)
    public static int gcd(int m,int n)
    {
        while(true)
        {
           if((m=m%n)==0)
           {
               return n;
               
           }    
           if((n=n%m)==0)
           {
               return m;
           }
           System.out.println("m值"+m+"\tn值"+n);
        }
    }
     public static void main(String[] args)
       throws Exception
     {
         int a=23,b=32;
         int c=gcd(a,b);
         System.out.println("最小公倍数:"+a*b/c+"\n最大公约数:"+c);
     }
}

 

 

 五、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222

 

  

package JingDian;

import java.io.InputStreamReader;
import java.util.Scanner;


public class dieshuhe {
    public static void main(String[] args)
    {
        
        System.out.println("请输入最大的a的值:");
        int result =0;
        int st = 0;
        int i=1;
        //获取键盘输入
        Scanner sc = new Scanner(new InputStreamReader(System.in));
        String input = sc.next();
        String [] str=new String[input.length()];
        
        for(int tmp=0;tmp<input.length();tmp++)
        {
            
            if(i>input.length())
            {
                break;
            }
            //str[tmp]中装的是input的前tmp个字母因此本程序不仅可以计算当a输入为4444时候4+44+444+4444这样的表达式,
            //还可以计算a暑促为432时4+43+432这样的表达式,只要输入最大的那个数就可以了。
            str[tmp]=input.substring(0,i);
            i++;
            //将str[tmp]解析为整数进行相加
            st = Integer.parseInt(str[tmp]);
            result = result + st;
            
            
        }
        
        
        
        System.out.println(result);
    }



}

 

 

 六、排列组合数问题

       题目: 有数字1,2,3,4,能组成多少个互不相同且无重复数字的三位数?都是多少?

       分析:先组成数,再去掉重复的数字(so easy)

 

 

package JingDian;

public class pailieshu {
     public static void main(String[] args){
         
         for(int i=1;i<=4;i++)
         {
             for(int j=1;j<=4;j++)
             {
                 for(int k=1;k<=4;k++)
                 {
                     if(i!=j&&j!=k&&k!=i)
                     {
                         System.out.println(i*100+j*10+k);
                     }
                 }
             }
         }
     }
}