java基础语法2——牛客篇

学习目标:

首先带着大家把牛客java基础语法篇的题目过一遍。

今日学习内容:

笔记

1、数列求和

有数列为:9,99,999,…,9999999999。要求使用程序计算此数列的和,并在控制台输出结果。(请尝试使用循环的方式生成这个数列并同时在循环中求和)。

分析:
既然题目说直接在循环中求和,那我们就没必要定义一个数组放这些数了。观察该数列的数字规律,我们可以发现都和9有关,那我们就先定义一个long型的变量来赋值一个9,然后每次进行乘10在加9,乘几个十就与循环体中的i有关了。

扩展:也可以尝试使用parseLong(String x)方法,该方法目的在于将String参数解析为有符号的long。简单来讲该方法是一个将字符转换为数字的方法。
以本题为例:sum = Long.parseLong(a);意思就是将字符串"9"以十进制的方式转换为数字。代码如下:

public class Main {
    public static void main(String[] args) {
        long sum = 0;
        long base = 9;
        for(int i = 0;i < 10;i++){
            sum += base;
            base = base * 10 + 9;
        }
        /*String a = "9";
        long sum = 0;
        for(int i = 0;i<10;i++){
            sum = Long.parseLong(a,10) + sum;
            a = a + "9";
        }*/
        System.out.println(sum);
    }
}

2、统计输入正数个数

控制台输入整数,请设计一个死循环,当用户输入非正数时停止输入。请给出用户输入的正整数个数(默认输入个数不超过2147483647)

代码:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        int count = 0;
        Scanner scanner = new Scanner(System.in);
        while(true){
            if(scanner.nextInt() <= 0){
                System.out.print(count);
                break;
            }
            else{
                count++;
            }
        }
    }
}

3、求最小公倍数

编写一个方法,该方法的返回值是两个不大于100的正整数的最小公倍数
示例1
输入:3 7
输出:21

分析:如何找到两数的最小公倍数?我们可以想到这两个数肯定是能被最小公倍数整除的,即以这两个数较大的数为基数,设计一个循环,每次进行判断这个基数能否整除那个较小的数,不能则基数再加上较大的数,能则返回。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){

        int max = (m > n ? m : n);
        int min = (m < n ? m : n);
        for(int i = max;i <= m * n;i += max){
            if(i % min == 0){
                return i;
            }
        }
        return 0;
    }
}

4、小球走过路程计算

一球从h米高度自由落下,每次落地后反弹回原高度的一半再落下,求它在第n次落地时共经过了多少米?第n次反弹多高?(先输出反弹的高度再输出经过的距离,中间用空格隔开)
备注:
结果保留三位小数,保留方式已经写在预设方法备注中

分析:
定义一个变量sum,用于记录第n次反弹后经过的总距离。
使用循环模拟落地反弹的过程,每次反弹,高度减半,每次经过的距离为反弹后距离的2倍,总距离只需将累加的数再减去初始的高度,因为对于初始高度我们也乘了2。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();
        float high = h;
        float sum = 0;
        for(int i = 0;i < n;i++){
            sum += 2 * h;
            h /= 2;
        }
        System.out.println(String.format("%.3f",h) + " " + String.format("%.3f",sum - high));
    }
}

5、求平均数

键盘输入任意多个10000以内正整数(负数代表结束),求出它们的平均数。(平均数为double类型,保留两位小数)

分析:
定义一个计数变量i和一个累加和变量sum,分别用于记录整数个数,以及它们的累加和。
使用一个循环进行模拟输入,如果是负数,则终止循环。每轮循环,计数加一,并且累加和加上对应数字,最后将累加和与计数的商作为平均数输出。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        double average = 0,sum = 0;
        int i = 0;
        while(true){
            int num = scan.nextInt();
            if(num < 0){
                break;
            }
            sum += num;
            i++;
        }
        average = sum / i;
        System.out.print(String.format("%.2f",average));
    }
}

5、判断质数

请补全预设代码中判断质数的方法。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main main = new Main();
Scanner scan = new Scanner(System.in);
int number = scan.nextInt();
System.out.println(main.isPrimeNumber(number));
}
public Boolean isPrimeNumber(int number) {
//write your code here…
}
}
输入:2
输出:true

分析:
定义一个boolean型变量,判断是否是质数。
使用一个循环进行判断,如果number能被2到number的任意一个数整除(这个数的平方根要小于number),说明不是质数。自己思考为什么是平方根。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        Scanner scan = new Scanner(System.in);
        int number = scan.nextInt();
        System.out.println(main.isPrimeNumber(number));
    }
    public Boolean isPrimeNumber(int number) {
        for(int i = 2;i * i < number;i++){
            if(number % i ==  0){
                return false;
            }
        }
        return true;
    }
}

6、计算整数位数

输入一个整数,计算它的位数。如果输入的整数不大于0则输出这个数
示例1
输入:9999
输出:4
示例2
输入:0
输出:0
示例3
输入:-1
输出:-1

分析:
定义一个位数变量cnt,记录对应位数变化,初始值记为1.
使用一个for循环,只要num/10大于0,则位数加一,否则输出cnt。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        scan.close();
        int cnt = 1;
        if(num <= 0){
            System.out.print(num);
        }
        for(int i = 0; ;i++){//write code here......
            if((num /= 10) > 0)
                cnt++;
            else{
                System.out.print(cnt);
                break;
            }
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值