课程资源来自于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");
}
}
}