JAVA基础编程练习题--50道(1-10)

题目来源:https://blog.csdn.net/qiucaijuan/article/details/6650925

记录做的题目,附上自己的思路。


题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

直观上并没有很明显的规律,先列举出前几个月的月份和兔子数看看
观察可知兔子数的规律为1,1,2,3,5,8,13,21...即为斐波那契数列

public class question01 {
    public static  void main(String arg[]){
        int i;
        long arr[]=new long[26];
        arr[0]=arr[1]=1;
        System.out.println("第1个月的兔子有1对,"+"总共是"+2+"只");
        System.out.println("第2个月的兔子有1对,"+"总共是"+2+"只");
        for (i=2;i<=35;i++)
        {
            arr[i]=arr[i-1]+arr[i-2];
            System.out.println("第"+i+"个月的兔子有"+arr[i]+"对,"+"总共是"+2*arr[i]+"只");
        }

    }
}

 

题目2:判断101-200之间有多少个素数,并输出所有素数。

素数的定义为只能被1或者自身整除的数字
所以可以用这个数分别去除从2到自身的所有数字
如果能整除,则表示不是素数,否则是素数

public class question02 {
    public static void main(String arg[]) {
        int n = 0;//记录素数个数
        for (int i = 100; i < 200; i++) {
            if (isPrime(i)) {
                System.out.print(i + " ");
                n++;
            }

        }
        System.out.println("素数的个数为:" + n);

    }

    //判断是否为素数的部分
    private static boolean isPrime(int i) {
        for (int j = 2; j < Math.sqrt(i); j++) {
            if (i % j == 0){
                return false;
        }
    }

    return true;
    }
}


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

分别将三位数的各个位数的立方加起来判断是否原来的数字即可。
用%实现取各个位数

public class question03 {
    public static void main(String[] args){
        int n=0;//水仙花总数
        for (int i=100;i<1000;i++){
            int a=i%10; //个位上的数字
            int b=i/10%10; //十位上的数字
            int c=i/100; //百位上的数字
        if(a*a*a+b*b*b+c*c*c==i) {
            System.out.print(i + " ");
            n++;
        }
        }
        System.out.println("水仙花的个数为:"+n);
    }
}

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


先找到最小的质数,如果是这个数字自身,则输出,否则判断能否被整除
取一个比n小的数字i,如果n能被i整除,输出i,并用结果作为新的n,重复第一步
如果n不能被i整除,则i=i+1,重复第一步

public class question04 {
    public static void main(String[] args){
        System.out.print("请输入一个正整数:");
        Scanner scanner=new Scanner(System.in);
        int input=scanner.nextInt();
        System.out.print(input+"=");
        //取i,判断能否被整除
        for(int i=2;i<input+1;i++){
            while(input%i==0&&input!=i){
                input=input/i;
                System.out.print(i+"*");
            }
            //是这个数字自身则结束
            if(input==i){
                System.out.print(i);
                break;
            }
        }
        scanner.close();
    }
}

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

 

简单题。。

 

public class question05 {
    public static void main(String[] args){
        System.out.print("请输入你的分数:");
        Scanner scanner= new Scanner(System.in);
        int input=scanner.nextInt();
        String belong=input>=90?"A":(input>=60?"B":"C");
        System.out.println(input+"分属于"+belong+"等级");
        scanner.close();
    }
}

 

题目6:输入两个正整数m和n,求其最大公约数和最小公倍数。


先求最大公约数,再求最小公倍数
用大数对小数求余
将小数赋值给大数,把求余的结果赋值给小数
循环直到求余结果为0
被求余的数就是最大公约数

 

public class question06 {
    public static void main(String[] args) {
        int max = 0;//最大公约数
        int min = 0;//最小公倍数
        System.out.print("输入两个人整数:");
        Scanner scanner = new Scanner(System.in);
        int input1 = scanner.nextInt();
        int input2 = scanner.nextInt();
        min = input1 * input2;
        int temp = 1;//暂时中间数

        //保证输入的第一个数大于第二个数
        if (input2 > input1) {
            temp = input1;
            input1 = input2;
            input2 = temp;
        }

        while (temp != 0) {//循环结束的条件为求余结果不为零
            temp=input1%input2;
            input1=input2;
            input2=temp;
        }
        max=input1;//结束循环时,求雨结果为0.被求余的数为最大公约数
        min=min/max;
        System.out.println("最大公约数为:"+max);
        System.out.println("最小公倍数为:"+min);
    }
}

 

题目7:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。

 

nextLine()获取一行字符串
把字符串的字符赋值到一个数值中
对比数值在ASK码的范围来确定符号类别

 

public class question07 {
    public static void main(String[] args){
        int letter=0;
        int space=0;
        int num=0;
        int others=0;

        System.out.println("输入一串字符:");
        Scanner scanner=new Scanner(System.in);
        String string=scanner.nextLine();//获取一行字符串


        char[]arr=string.toCharArray();
        for(int i=0;i<arr.length;i++){
            if(arr[i]>=48&arr[i]<=57){
                num++;
            }
            else if((arr[i]>=65&arr[i]<=90)||(arr[i]>=97&arr[i]<=122)){
                letter++;
            }
            else {
                others++;
            }
        }
        System.out.println(("数字"+num+"个,字母"+letter+"个,空格"+space+"个,其他"+others+"个")
        );
        scanner.close();
    }
}
 

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

 

将数字a用for循环到位数等于b即可

 

public class question08 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入循环数字a的值:");
        int a = scanner.nextInt();
        System.out.print("输入位数b的值:");
        int b = scanner.nextInt();
        int s=0,t=0;
        for(int i=0;i<=b;i++){
            t+=a;
            a=a*10;
            s+=t;
        }
        System.out.println(s);
    }
}

 

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

首先要知道,因数不会大于本身的一半,如48的最大因数为24,100的最大因数为50
先判断所有因数是否和输入值相等,相等则输出
用for循环嵌套求因数


public class question09 {
        public static void main(String[] args){
            System.out.println("1000内的因数为:");
            Scanner scanner=new Scanner(System.in);
            for(int i=1;i<=1000;i++){
                int sum=0; //sum表示因数和
                for(int j=1;j<i/2+1;j++){   //因数不会大于本身的一半
                    if(i%j==0)
                        sum=sum+j;
                    if(i==sum)
                        System.out.print(i+" ");
                }
            }
}
}

 

 

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


物理题...

public class question10 {
    public static void main(String[] args) {
        System.out.println("请输入小球下落的高度和落地的次数:");
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        float n=scanner.nextFloat();
        float sum=h;
        h/=2;
        for(int i=2;i<=n;i++){
            sum+=h*2;      //经过距离
            h/=2;          //反弹高度
        }
        System.out.println("在"+100+"米,经过"+n+"次能反弹"+h+"米,经过"+sum+"米");
        scanner.close();
    }
}
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值