【Java单元练习MOOC一】基础与进阶

课程资源来自于mooc中国,欢迎大家前来学习,点击此处可以访问
话不多说直接开始做题,其中部分题目我觉得还是不错的,虽然大部分还是以基础为主,不过还是可以从基础中学习新的算法知识,且听我一步一步来说!
在mooc提交平台注意所有的公共类均为Main
以下均是个人思路,有些平台的答案并没有我来得简洁,特别体现于第4,6题,希望对你有所帮助!
你的三连就是我更新的最大动力!

习题1:两个3位数之间的所有素数之和

题目描述:对任意给定的两个正整数n和m,100<n<m<1000, 计算这两个数之间所有素数之和,包含n、m自身。

import java.util.Scanner;
import java.math.*;

public class Main{
    public static void main(String[] args){
        Scanner sys=new Scanner(System.in);
        int n=sys.nextInt();
        int m=sys.nextInt();
        int sum=0;
        for(int i=n;i<=m;i++){
            if(isPrime(i)){
                sum+=i;
            }
        }
        System.out.println(sum);
    }
    public static boolean isPrime(int n){
        if(n==2||n==3) return true;
        else{
            for(int i=2;i<=Math.sqrt(n);i++){
                if(n%i==0) return false;
            }
        }
        return true;
    }
}

习题2:居民电费阶梯式计价器

题目描述:为鼓励居民节约用电,电力公司采取按用电量阶梯式计价的办法,居民应交电费y(元)与月用电量x(度)相关:当x不超过100度时,按0.3元/度计费; 当x不超过200度时,按0.4元/度计费;当x不超过300度时,按0.5元/度计费;当x超过300度时,按0.8元/度计费。请编写程序实现电费的计算。
输入格式:
一个正整数,代表月用电度数x
输出格式:
居民需要缴纳的电费y

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    Scanner sys=new Scanner(System.in);
    int x=sys.nextInt();
    double  sum;
    if(x<=100) sum=x*0.3;
    else if(x<=200) sum=x*0.4;
    else if(x<=300) sum=x*0.5;
    else sum=x*0.8;
    System.out.println(sum);
    }
}

习题3:华氏温度与摄氏温度的换算

题目内容:
用Java语言编写一个将华氏温度转换成摄氏温度的程序,转换的公式是:
°C = (°F -32)*5/9
其中C表示摄氏温度,F表示华氏温度。
程序的输入是一个整数,表示华氏温度。输出对应的摄氏温度,也是一个整数。

import java.util.Scanner;


public class Main{
    public static void main(String[] args){
        Scanner sys=new Scanner(System.in);
        int f=sys.nextInt();
        int c=(int)(f-32)*5/9;
        System.out.println(c);
    }
}

习题4:统计字符频率

题目描述:从键盘输入一行中英文混合的文字,统计其中出现的每个英文字母的频率并依字母表顺序,依次输出统计结果,统计时忽略字母大小的区别。
输入格式:
一行中英文混合的文字
输出格式:
输出每个字母及其出现次数,字母之间用2个空格分隔。
输入样例:
我们学习Java,we work very hard!
输出样例:
a=3 d=1 e=2 h=1 j=1 k=1 o=1 r=3 v=2 w=2 y=1
思考
这个题很明显就是使用Map来做,Map,具体可以看我这篇博客对Java Map的说明点击此处
重点内容如下图:
在这里插入图片描述

import java.util.Scanner;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

public class Main{
    public static void main(String[] args){
        Scanner sys=new Scanner(System.in);
        String n=sys.nextLine();
        String m=n.toLowerCase();
        Map<Character,Integer> mapc=new TreeMap<Character,Integer>();
        for(int i=0;i<m.length();i++){
            if(m.charAt(i)>=97&&m.charAt(i)<=122){
                if(mapc.containsKey(m.charAt(i))){
                    mapc.put(m.charAt(i),mapc.get(m.charAt(i))+1);
                }else{
                    mapc.put(m.charAt(i), 1);
                }   
            }
        }
        //mapc.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEachOrdered(e -> mapc.put(e.getKey(), e.getValue()));
        for(Entry<Character,Integer> entry: mapc.entrySet()){
            System.out.print(entry.getKey()+"="+entry.getValue()+"  ");
        }
    }
}

习题5:求n个非负整数之和

题目内容:

输入n个非负整数,输出他们的和。 1<=n<=100,而每个数则<800。对不符合要求的输入,输出提示信息: "error”。
输入格式:
输入包括两行。 第一行:包括一个整数n,表示总共有n个数。 第二行:包含n个整数。
输出格式:
输出n个数的和。
输入样例:
4
3 2 1 4
输出样例:
10

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sys=new Scanner(System.in);
        int n=sys.nextInt();
        int []a=new int[n];
        int sum=0,flag=0;
        if(1<=n&&n<=100){
            for(int i=0;i<n;i++){
                a[i]=sys.nextInt();
                if(a[i]>=800){
                    flag=1;
                }
                sum+=a[i];
            }
            if(flag==0) System.out.println(sum);
            else System.out.println("error");
        }else{
            System.out.println("error");
        }
    }
}



习题6:24小时制与12小时制的时间换算

题目内容:
编写一个程序,要求用户输入24小时制的时间,然后输出显示12小时制的时间。
输入格式:
在一行中输入带有中间的:符号(半角的冒号)的24小时制的时间,小时和分钟均采用2位数字格式,如14:18表示14点18分, 09:06表示9点零6分。
输出格式:
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如05:06 PM表示下午5点零6分。
注意:在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:00 PM;而夜里12点(24:00)被认为是第二天的时间,所以是12:00 AM。
输入样例:
20:09
输出样例:
08:09 PM
思考
此题看起来简单,思路要想对就没有问题了,这里我采取的方法是将字符串读取成整数来运算,注意,当单个字符被valueof时,使用的ascii码值,所以要进行减去48。同时我也将:作为一个分割点,一部分是hour,一部分是min,最后格式化输出和C语言类似就不要赘述。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sys=new Scanner(System.in);
        String s=sys.nextLine();
        int flag=0,thour=0,tmin=0,count=0;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==':'){
                flag=1;
                count=0;
                continue;
            }else{
                if(flag==0){
                    thour=thour*count*10+Integer.valueOf(s.charAt(i))-48;
                    count++;
                }else{
                    tmin=tmin*count*10+Integer.valueOf(s.charAt(i))-48;
                    count++;
                }
            }
        }
        int tflag=0;
        if(thour>=12){
            tflag=1;
        }
        if(tflag==1){
            if(thour==24){
                System.out.printf("%02d:%02d AM",thour-12,tmin);
                System.out.println();
            }
            else if(thour==12){
                System.out.printf("%02d:%02d PM",thour,tmin);
                System.out.println();
            }else{
                System.out.printf("%02d:%02d PM",thour-12,tmin);
                System.out.println();
            }
        }else{
            System.out.printf("%02d:%02d AM",thour,tmin);
            System.out.println();
        }
    }
}

习题7:学习小组结伴

为了促进互帮互相,决定成立学习小组。小组结伴的规则是这样的:先将学号按升序排列,排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴…依次类推,2个一组成同伴。
输入格式:
第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。 第二行n个整数表明n个同学的学号,学号之间有一个空格,学号是无序输入的。
如果输入的学生数是奇数,则输出提示信息:“odd number”
输出格式:
共n/2行,每行二个整数,表明结伴同学的学号,两个学号之间有一个空格。
输入样例:
8
15 6 24 12 13 21 8 4
输出样例:
4 24
6 21
8 15
12 13

思考:别的不说,就是一个Array排序,注意越界问题。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sys=new Scanner(System.in);
        int n=sys.nextInt();
        int[]a=new int[n+1];
        if(n%2==0){
            for(int i=0;i<n;i++){
                a[i]=sys.nextInt();
            }
            Arrays.sort(a);
            for(int i=1;i<=n/2;i++){
                System.out.println(a[i]+" "+a[n-i+1]);
            }
        }else{
            System.out.println("odd number");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值