Java基础50题(1) 1~10题

不说什么了,从最基础的开始吧。不论多简单的题目,自己不动手敲一遍是不可能深刻理解的。嘴上说说谁都会。

2018.3.25
Java基础50题系列源码已上传到我的github仓库,有需要的可以自取,欢迎大家提出建议
https://github.com/Lawliet0717/Java-foudamental-50-problems

第一题 ##

题目:原题是生兔子的问题
思路:其实就是斐波那契问题

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.21
 */
//斐波那契问题

public class example_01 {

    public static long fibonacci(int n){
        if(n == 0){
            return 0;
        }else if(n == 1){
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2) ;
    }

    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        System.out.print("请输入年份:");
        int n = in.nextInt();
        long res = fibonacci(n);
        System.out.println("现在已经有" + res + "只兔子拉!");
    }

}

第2题

原题:判断101-200之间有多少个素数
思路:2个循环,第二个循环里从1开始判断是不是某数的因数,如果某数只有2个因数(1和它本身),那么就是素数

package Java基础50题;

/*
 *  Lawliet.2018.3.21
 */
//判断101-200之间有多少个素数
public class example_02 {
    public static void main(String args[]){
        int factor = 0;
        int num = 0;
        for(int i = 101; i <= 200; i++){
            for(int j = 1; j <= i; j++){
                if(i % j == 0){
                    factor++;
                }
            }
            if(factor == 2){
                num++;
                System.out.print(i + " ");
            }
            factor = 0;
        }
        System.out.println();
        System.out.println("101-200之间一共有 " + num + " 个素数" );
    }
} 

第3题

原题:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
思路:理解怎么求一个三位数的个位,十位,百位上的数字

package Java基础50题;

/*
 *  Lawliet.2018.3.21
 */
/*
 * 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
 * 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
 */

public class example_03 {
    public static void main(String args[]){
        int x,y,z;//分别代表百位数字,十位数字,个位数字
        double sum;
        for(int i = 100; i <= 999; i++){
            z = i % 10;//个位数:除10取余
            y = (i / 10) % 10;//十位数:除10之后,再除10取余
            x = i / 100;//百位数:除100取余
            sum = Math.pow(x, 3) + Math.pow(y, 3) + Math.pow(z, 3);
            if(sum == i){
                System.out.println(i);
            }
        }
    }
}

第4题

原题:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
思路:对一个正整数来说,从2开始尝试,如果是的话,除2得商,用商继续求质因数

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.21
 */
//将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 
public class example_04 {
    public static void main(String args[]){
        int x;
        Scanner in = new Scanner(System.in);
        System.out.println("输入一个正整数");
        x = in.nextInt();
        new PrimeSplit(x);
    }

    public static class PrimeSplit{  
        int k = 2;
        public PrimeSplit(int x){
            if(x <= 1){
                System.out.println("无效!");
            }else if(x == 2){
                System.out.println("输入的正整数 =1*" + x);
            }else{
                System.out.print("输入的正整数 =1");
                while(k <= x){
                    if(x % k == 0){
                        System.out.print("*" + k);
                        x = x/k;
                    }else{
                        k++;
                    }
                }
            }
        }
    }
}   

第5题

原题:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
思路:?:运算符的理解运用

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.21
 */
//利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 
public class example_05 {
    public static void judgeScore(int x){
        char grade = 'A';
        grade = x >= 90 ? 'A' : (x < 60 ? 'C' : 'B');
        System.out.println("你的等级是:" + grade);
    }
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入你的成绩:");
        int x;
        x = in.nextInt();
        judgeScore(x);
    }
}

第6题

原题:输入两个正整数m和n,求其最大公约数和最小公倍数
思路:求公约数用辗转求余法,记得把大数放前面
求公倍数用大数的1倍,2倍,3倍,依次类推来尝试

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.22
 */
//输入两个正整数m和n,求其最大公约数和最小公倍数
public class example_06 {
    public static class gcdlcm{
        public int gcd(int m, int n){
            if(m < n){
                int tmp = m;
                m = n;
                n = tmp;
            }
            if(m % n == 0){
                return n;
            }else{
                m %= n;
                return gcd(m , n);
            }
        }
        public int lcm(int m, int n){
            if(m < n){
                int tmp = m;
                m = n;
                n = tmp;
            }
            int res = m;
            int i = 2;
            while(res % n != 0){
                res = m * i;
            }
            return res;
        }
    }
    public static void main(String args[]){
        int m = 20;
        int n = 5;
        gcdlcm res = new gcdlcm();
        System.out.println(res.gcd(m, n));
        System.out.println(res.lcm(m, n));
    }
}

第7题

原题:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
思路:”理解String类型的tochararray()函数,将一个字符串转换成字符数组
理解Character.isxxx函数,怎么判断字母,空格,数字

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.22
 */
//输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
public class example_07 {
    public static void main(String[] args){
        int letterNum = 0;
        int spaceNum = 0;
        int digitNum = 0;
        int otherNum = 0;
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一段字符串");
        String str;
        str = in.nextLine();
        char[] ch = str.toCharArray();
        for(int i = 0; i < ch.length; i++){
            if(Character.isLetter(ch[i])){
                letterNum++;
            }else if(Character.isSpaceChar(ch[i])){
                spaceNum++;
            }else if(Character.isDigit(ch[i])){
                digitNum++;
            }else{
                otherNum++;
            }
        }
        System.out.println("字母个数为:" + letterNum);
        System.out.println("空格个数为:" + spaceNum);
        System.out.println("字符个数为:" + digitNum);
        System.out.println("其他个数为:" + otherNum);
    }
}

第8题

原题:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
思路:数学问题,假如是1+11+111 就是 1 + (1*10+1) + (1*10² + 11),依次类推

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.22
 */
/*求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
 *几个数相加由键盘控制。 
 */
public class example_08 {
    public static void main(String[] args){
        int res;
        res = calculate(2, 5);
        System.out.println(res);
    }
    public static int calculate(int base, int totalTime){
        int res = 0;
        int time = 0;
        int nowdate = 0;
        int lastdate = 0;
        while(time < totalTime){
            nowdate = (int) (base * Math.pow(10, time++) + lastdate);
            res += nowdate;
            if(time == totalTime ){
                System.out.print(nowdate + "=");
            }else{
                System.out.print(nowdate + "+");
            }
            lastdate = nowdate;
        }
        return res;
    }
}

第9题

原题:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程 找出1000以内的所有完数。
思路:简单的2层循环

package Java基础50题;

/*
 *  Lawliet.2018.3.22
 */
//一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。

public class example_09 {
    public static void main(String[] args){
        for(int i = 2; i < 1000; i++){
            int sum = 0;
            for(int j = 1; j < i; j++){
                if(i % j == 0){
                    sum = sum + j;
                }
            }
            if(sum == i){
                System.out.println(i);
            }
        }
    }
}

第10题

原题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
思路:每次反弹的高度是原来高度的0.5倍,每次走过的高度是原来的高度的1.5倍

package Java基础50题;
import java.util.*;

/*
 *  Lawliet.2018.3.22
 */
/*
 * 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
 * 求它在第10次落地时,共经过多少米?第10次反弹多高? 
 */

public class example_10 {

    public static void ball(int times){
        double curHeight = 100;
        double totalHeight = 0;
        for(int i = 0; i < times; i++){
            totalHeight += 1.5 * curHeight;
            curHeight *= 0.5;
        }
        System.out.println("现在的高度是:" + curHeight + "米");
        System.out.println("一共经过" + totalHeight + "米");
    }

    public static void main(String[] args){
        int times;
        Scanner in = new Scanner(System.in);
        System.out.println("请输入小球反弹次数:");
        times = in.nextInt();
        ball(times);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值