Java基础算法练习题(一)

希望能对初学java的朋友有所帮助,共同学习.发现有说得不清楚的地方,欢迎留言询问.

几乎每一道题都附有两种方法,第一种比较简单,所以可能相对来说会好理解一些.第二种算法好得多.来源于原贴答案,原创及答案链接: http://www.cnblogs.com/tonylp

 

 题目 1:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

       例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

//        int a = 0;
//        int b = 0;
//        int c = 0;
//        for(int i=100 ; i<=999 ; i++)
//        {
//            a = i/100;
//            b = i%100/10;
//            c = i%10;
//            if(i == a*a*a+b*b*b+c*c*c)
//            {
//                System.out.print(i+"="+a+"+"+b+"+"+c);
//                System.out.println();
//            }
//        }

        //答案
        
//         int a, b, c;
//            int data;
//            for (int i = 100; i < 999; i++) {
//                a = i / 100;
//                b = (i - 100 * a) / 10;
//                c = i - 100 * a - 10 *b;
//                data = a*a*a+b*b*b+c*c*c;
//                if(data == i){
//                    System.out.println(i);
//                }
//            }

题目 2:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

//        System.out.println("请输入一个正整数:");
//        int num = input.nextInt();
//        boolean puanDuan = true;
//        System.out.print(num+"=");
//        for(int i= 2; i<num ;i++ )
//        {
//            if(i == num-1)
//            {
//                System.out.print(num);
//                break;
//            }                
//            if(num%i == 0 )
//            {
//                num /= i;
//                System.out.print(i+"*");
//                i=2;
//            }                
//        }
        
        //答案
        
//        public class resolveNum {
//            public static final int NUM = 130;
//
//            public static void main(String[] args) {
//                // TODO Auto-generated method stub
//                int k = 2;
//                int num = NUM;
//                System.out.print(num + "=");
//                while (num > k) {
//                    if (num % k == 0) {
//                        System.out.print(k + "*");
//                        num = num / k;
//                    } else {
//                        k++;
//                    }
//                }
//                System.out.println(k);
//            }
//        }

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

//        int[] a = {1,2,3,4};
//        int b = 0 ;
//        
//        for(int i = 0 ; i<4 ; i++)
//        {
//            for(int j = 0 ; j<4 ; j++)
//            {
//                for(int k = 0 ;k<4 ; k++)
//                {
//                    if(i == j || i == k || j == k)
//                    {                    
//                    }else
//                    {
//                        System.out.print(a[i]*100+a[j]*10+a[k]);
//                        b++;
//                        System.out.println();
//                    }                    
//                }
//            }
//        }
//        System.out.print(b);
        
        //第二种方法
        
//         int a = 0;
//            int b = 0;
//            int c = 0;
//            int num = 1;
//            for (a = 1; a < 5; a++) {
//                for (b = 1; b < 5; b++) {
//                    for (c = 1; c < 5; c++) {
//                        if (a != b && a != c && b != c) {
//                            System.out.println("NO." + num + ":" + a + "" + b + ""
//                                    + c);
//                            num++;
//                        }
//                    }
//                }
//            }

题目4 :一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

完全平方数 :如果一个正整数 a 是某一个整数 b 的平方 .0也是完全平方数

//        for(int i = 0 ; i<=100000 ;i++)
//        {
//            for(int j = 0 ;j<=1000 ; j++)
//            {
//                if((i+100) == j*j )
//                {
//                    for(int k=0 ; k<=1000 ; k++)
//                    {
//                        if((i+100+168) == k*k)
//                        {
//                            System.out.println(i);
//                        }
//                    }
//                }                
//            }        
//        }
        
        
        //答案: Math.sqrt() 开平方方法
        
//        for(int i=0;i<100000;i++){
//            if((Math.sqrt(i+100)%1==0)&&(Math.sqrt(i+168+100)%1 == 0)){
//                System.out.println(i);
//            }
//        }

题目5 :输入某年某月某日,判断这一天是这一年的第几天?

闰年的条件是:一:能被4整除,但不能被100整除的年份(例如2008是闰年,1900不是闰年)
          二:能被400整除的年份(例如2000年)也是闰年。

//        System.out.println("请输入年份:");
//        int year = input.nextInt();
//        
//        System.out.println("请输入月份:");
//        int month = input.nextInt();
//        
//        System.out.println("请输入日期:");
//        int day = input.nextInt();
//        
//        int[] monthDay = {31,28,31,30,31,30,31,31,30,31,30,31};
//        int allDay = 0;
//        if((year%4 == 0 && year%100 != 0) || (year%400 == 0) )
//        {
//            //闰年 二月29天
//            for(int j=0 ; j < month-1 ;j++ )
//            {                
//                if(j == 1)
//                {
//                    allDay += 29;     //闰年二月29天
//                }else
//                {
//                    allDay += monthDay[j];
//                }                
//            }
//        }else
//        {
//            //不是闰年 二月28天
//            for(int i=0 ; i< month-1 ;i++ )
//            {                
//                allDay += monthDay[i];
//            }
//        }        
//        //最后加上当月的天数
//        System.out.println("今天是这一年的第:"+(allDay+day)+"天");
        
        
    //答案
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入年份:");
//        int year = sc.nextInt();
//        System.out.println("请输入月份:");
//        int month = sc.nextInt();
//        System.out.println("请输入天数:");
//        int day = sc.nextInt();
//        int date = 0;
//        int arr[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
//            arr[1] = 29;
//        }
//        for (int i = 0; i < month - 1; i++) {
//            date += arr[i];
//        }
//        date += day;
//        System.out.println("天数为:" + date);

题目6 :输入三个整数x,y,z,请把这三个数由小到大输出。

//        System.out.println("请输入整数x:");
//        int x = input.nextInt();
//        System.out.println("请输入整数y");
//        int y = input.nextInt();
//        System.out.println("请输入整数z");
//        int z = input.nextInt();
//        
//        int a = 0;
//        int b = 0;
//        int c = 0;
//        if(x<y && x<z)
//        {
//            a = x;
//            if(y<z)
//            {
//                b = y;
//                c = z;
//            }else
//            {
//                b = z;
//                c = y;
//            }
//        }else if(x<y &&x>z)
//        {
//            a = z;
//            b = x;
//            c = y;
//        }else if(x>y && x<z)
//        {
//            a = y ;
//            b = x;
//            c = z;
//        }else
//        {
//            if(y>z)
//            {
//                a = z;
//                b = y;
//                c = x;
//            }else
//            {
//                a = y ;
//                b = z;
//                c = x;
//            }
//        }        
//        System.out.println(a+" "+b+" "+c);
        
    //答案
        
    //下面这种方法的确好了太多, 引人深思.
//        System.out.println("请输入整数x:");
//        int x = input.nextInt();
//        System.out.println("请输入整数y");
//        int y = input.nextInt();
//        System.out.println("请输入整数z");
//        int z = input.nextInt();
//        
//        int temp = 0;
//        if(x>y)
//        {
//            temp = x;
//            x = y;
//            y = temp;
//        }
//        if(x>z)
//        {
//            temp = x;
//            x = z;
//            z = temp;
//        }
//        if(y>z)
//        {
//            temp = y;
//            y = z;
//            z = temp;
//        }
//        
//        System.out.println(x+"<"+y+"<"+z);

题目7:输出9*9口诀。

//        for(int i = 1 ; i<10 ; i++)
//        {
//            for(int j = 1 ; j<10 ;j++)
//            {
//                System.out.print(i+"*"+j+"="+i*j+"\t");
//                if(j ==9)
//                {
//                    System.out.println();
//                }
//            }
//        }
    
    //答案
        //同上

题目 8:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
       又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
      以后每天早上都吃了前一天 剩下的一半零一个。
      到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

//        int j=1;
//        for(int i=0 ; i<10 ;i++)
//        {
//            j = (j+1)*2;
//        }
//        System.out.println(j);

//答案  同上

 

题目9 :有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...
        求出这个数列的前20项之和。

//        double a = 2;
//        double b = 1;
//        double c = 0;
//        
//        int num = 2/1 ; 
//        for( int i=1 ; i<20 ; i++)
//        {
//            c = a;
//            a = a+b;
//            b = c;
//            num += a/b;
//        }
//        System.out.println(num+"="+a+"/"+b);
        
        
        
        //答案        
//        int[] a = new int[20];
//        int[] b = new int[20];
//        double sum = 0.0;
//        a[0] = 2;
//        a[1] = 3;
//        b[0] = 1;
//        b[1] = 2;
//        for(int i = 2;i<20;i++){
//            a[i] = a[i-1]+a[i-2];
//        }
//        for(int j =2;j<20;j++){
//            b[j] = b[j-1]+b[j-2];
//        }
//        for(int i =0;i<20;i++){
//            sum+=a[i]/b[i];
//        }
//        System.out.println(sum);

 题目10:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
          完数的意思是将所有因数加起来的和等于这个数.比如28= 1+2+4+7+14

 

//        //num 保存每个因数,最后加起来.
//        int num = 0; 
//        for(int i = 2;i<1000 ; i++)
//        {
//            for(int j=1; j<i ;j++)
//            {
//                if(i%j == 0)
//                {
//                    num+=j;
//                }
//            }
//            if(num == i)
//            {
//                System.out.println(i);
//            }
//            num = 0;
//        }
        
        //答案 同上

 

 

(初学java,博客记录为主,轻喷,错误想必不少,如果您能指出,不胜感激,部分内容非原创,来源于百度)

转载于:https://www.cnblogs.com/j1639797/p/9627656.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值