admin管理员组

文章数量:1794759

#Java学习#习题二

#Java学习#习题二

文章目录
    • 判断题
    • 函数题
      • 使用继承,实现“剪刀石头布的游戏”
    • 编程题
      • 学投资
      • 质因子分解
      • 成绩分级管理
      • 判断三角形类型
      • 按正整数的相反数字顺序输出
      • 作品评分
      • 666

其他Java学习的内容见:目录

判断题

1-1.系统自动引入java.lang包中的所有类,因此不需要再显式地使用import语句引入该包的所有类。

T

1-2.java.lang包是Java的核心类库,它包含了运行Java程序必不可少的系统类

T

1-3.如果一个类的声明中没有使用extends关键字,这个类被系统默认为是继承Object类。

T

1-4.为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。

T

1-5.一个类可以实现多个接口

T

函数题 使用继承,实现“剪刀石头布的游戏”

使用继承,实现“剪刀石头布的游戏”。 小时候很喜欢玩一个游戏,“剪刀石头布”,可以是出拳的形式,或跳格子的形式。现在我们用计算机来玩这个游戏。 电脑用随机数产生剪刀石头布,游戏玩家用输入1,2,3的方式出拳。 游戏玩家输入1或2或3,分别 代表剪刀(1)石头(2)布(3)。 电脑胜出时,显示"Winner is computerPlayer." 游戏玩家胜出时,显示“Winner is personPlayer.” 平局时显示"A Draw."

函数接口定义: 根据主方法内容,实现三个类的定义,分别是是ComputerPlayer、PersonPlayer、Game类。 其中ComputerPlayer、PersonPlayer要继承Player类。 根据主方法中的用法,实现Game类。

裁判测试程序样例:

import java.util.Scanner; class Player{ String name; Player(String name){ this.name = name; } int show() { //出拳方法 int show = ( int ) (Math.random() * 10 ) %3 +1; return show ; } } /* 请在这里填写答案 */ public class Main { public static void main(String[] args) { ComputerPlayer c = new ComputerPlayer ("computer"); PersonPlayer p = new PersonPlayer("player ") ; Game g = new Game( c ,p ); g.start(); } }

输入样例: 2

输出样例: A Draw.

编译程序

class ComputerPlayer extends Player { ComputerPlayer(String name) { super(name);//子类的构造方法必须调用父类的构造方法,使用super关键字;使用super关键字的这行语句必须放在子类的第一行 } } class PersonPlayer extends Player{ PersonPlayer(String name) { super(name); } int choice(){ Scanner scan=new Scanner(System.in); int c=scan.nextInt(); return c; } } class Game{ ComputerPlayer cp; PersonPlayer pp; public Game(ComputerPlayer cp, PersonPlayer pp) { this.cp = cp;//切忌写成cp=cp this.pp = pp; } //如果刚开始不习惯用this,可以用下面替代 //public Game(ComputerPlayer x, PersonPlayer y) { // x = cp;//切忌写成cp=cp // y = pp; // } void start(){ int c=cp.show(),p=pp.choice(); if (c==p) System.out.print("A Draw."); else if (c==1&&p==3) System.out.print("Winner is computerPlayer."); else if (p==1&&c==3) System.out.print("Winner is personPlayer."); else if (p<c) System.out.print("Winner is computerPlayer."); else System.out.print("Winner is personPlayer."); } } 编程题 学投资

小白学习了一些复利投资知识,想比较一下复利能多赚多少钱(所谓复利投资,是指每年投资的本金是上一年的本金加收益。而非复利投资是指每年投资金额不包含上一年的收益,即固定投资额)。假设他每年固定投资M元(整数),每年的年收益达到P(0<P<1,double),那么经过N(整数)年后,复利投资比非复利投资多收入多赚多少钱呢?计算过程使用双精度浮点数,最后结果四舍五入输出整数(Math的round函数)。

输入格式: M P N

输出格式: 复利收入(含本金),非复利收入(含本金),复利比非复利收入多的部分(全部取整,四舍五入)

输入样例: 10000 0.2 3

输出样例: 17280 16000 1280

编译程序

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int m = in.nextInt(); double p = in.nextDouble(); int n = in.nextInt(); double a = 0.0, b = 0.0, c = 0.0; b = m * p * n + m; int i; a = (double)m; for(i = 0; i < n; i++) { a *= 1 + p; } c = a - b; System.out.println(Math.round(a) + " " + Math.round(b) + " " + Math.round(c)); } } 质因子分解

本题目要求读入一个大于1的整数,编程将其分解成若干个质因子(素数因子)积的形式。

输入格式: 大于1的整数一个。

输出格式: 将输入的正整数分解成若干个质因子积的形式,质因子的出现顺序按从小到大排列。如:30=222*5;如果整数本身为质数或素数,直接输出,如:13=13。

输入样例: 12480

输出样例: 12480=2*2*2*2*2*2*3*5*13

编译程序

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n = in.nextInt(); System.out.print(n+"="); int i; for(i = 2; i <= Math.sqrt(n); i++) { if(n % i == 0) { System.out.print(i+"*"); n /= i; i--; } } System.out.println(n); } } 成绩分级管理

学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办法是:小于60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序,对输入的成绩进行等价划分

输入格式: 输入一个整数表示成绩。

输出格式: 根据输入的成绩,输出对应的等级(大写字母)

输入样例: 在这里给出一组输入。例如: 72

输出样例: 在这里给出相应的输出。例如: C

编译程序

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n = in.nextInt(); if(n < 60) System.out.println("E"); else if(n >= 60 && n < 70) System.out.println("D"); else if(n >= 70 && n < 80) System.out.println("C"); else if(n >= 80 && n < 90) System.out.println("B"); else if(n >= 90) System.out.println("A"); } } 判断三角形类型

输入三角形三条边,判断该三角形为什么类型的三角形。

输入格式: 在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。

输出格式: (1)如果输入数据非法,则输出“Wrong Format”; (2)如果输入数据合法,但三条边不能构成三角形,则输出“Not a triangle”; (3)如果输入数据合法且能够成等边三角形,则输出“Equilateral triangle”; (4)如果输入数据合法且能够成等腰直角三角形,则输出“Isosceles right-angled triangle”; (5)如果输入数据合法且能够成等腰三角形,则输出“Isosceles triangle”; (6)如果输入数据合法且能够成直角三角形,则输出“Right-angled triangle”; (7)如果输入数据合法且能够成一般三角形,则输出“General triangle”。

输入样例1: 在这里给出一组输入。例如: 50 50 50.0

输出样例1: 在这里给出相应的输出。例如: Equilateral triangle

输入样例2: 在这里给出一组输入。例如: 60.2 60.2 80.56

输出样例2: 在这里给出相应的输出。例如: Isosceles triangle

输入样例3: 在这里给出一组输入。例如: 0.5 20.5 80

输出样例3: 在这里给出相应的输出。例如: Wrong Format

编译程序

import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); double a[] = new double[3]; int i; for(i = 0; i < 3; i++){ a[i] = in.nextDouble(); } for(i = 0; i < 3; i++){ if(a[i] < 1 || a[i] > 200){ System.out.println("Wrong Format"); return; } } Arrays.sort(a); /*小补充: ||当左边为真时,就不运行右边的表达式了 |当左边为真,还是会运算右边的表达式 &&当左边为假时,就不会运算右边的表达式 &当左边为假时,还是会运算右边的表达式*/ if(a[0] + a[1] > a[2]){ if(a[0] == a[1] && a[1] == a[2]){ System.out.println("Equilateral triangle"); } else if(a[0] == a[1] && a[0] * a[0] + a[1] * a[1] - a[2] * a[2] < 0.000001) System.out.println("Isosceles right-angled triangle"); else if(a[2] == a[1] || a[2] == a[0] || a[0] == a[1]) System.out.println("Isosceles triangle"); else if(a[0] * a[0] + a[1] * a[1] - a[2] * a[2] < 0.0000010) System.out.println("Right-angled triangle"); else{ System.out.println("General triangle"); } } else System.out.println("Not a triangle"); } } 按正整数的相反数字顺序输出

本题目要求输入一个正整数,按数字的相反顺序输出。

输入格式: 输入一个正整数。

输出格式: 按输入正整数的数字相反顺序输出一个数字。

输入样例: 5236

输出样例: 6325

编译程序

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n = in.nextInt(); int m; while(n != 0){ m = n % 10; n /= 10; System.out.print(m); } } } 作品评分

全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。

输入格式: 输入数据包括两行: 第一行为n,表示n个评委,n>2。 第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。

输出格式: 输出平均分,结果保留两位小数。

输入样例: 6 10 9 8 7.9 9 9.5

输出样例: 8.88

编译程序

  • 初步版:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); String n=scan.nextLine(); String s=scan.nextLine(); int len=s.length(); double sum=0,aver=0,maxn=-1,minn=0x3f3f3f3f; int cnt=0; int x=Integer.parseInt(n); while(cnt<len) { int flag=0; for(int i=cnt;i<len;i++) { if(s.charAt(i)==' ') { flag=1; String ss=s.substring(cnt,i); double q=Double.parseDouble(ss); if(q>maxn) maxn=q; if(q<minn) minn=q; sum+=q; cnt=i+1; break; } } if(flag==0){ String ss=s.substring(cnt,len); Double q=Double.parseDouble(ss); if(q>maxn) maxn=q; if(q<minn) minn=q; sum+=q; break; } } aver=(sum-minn-maxn)/(x-2); System.out.printf("%.2f\\n",aver); } }

这里常见问题是,一个个输入数,会超时,因此将他们读成字符串,然后提取有效数据 具体详解:作品评分

  • 改进版:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); in.nextLine(); double sum = 0; String[] line = in.nextLine().split(" ");//split方法是String类的重要方法 for(String str : line) { sum = sum + Double.parseDouble(str);//包装类把String类型转换为double类型 } System.out.println(String.format("%.2f", sum/n)); } 666

中国人非常喜欢6这个数字,因为大家总爱说66大顺啊。数学狂人李某人喜欢把什么都数字化,于是她把顺利这个词也定义了数量级,6代表1级顺利,66代表2级顺利,666代表3级顺利,以此类推。你看,数学狂人的世界总是让人无法理解。今天,李某人决定将数学进行到底,现在她设前n级顺利的和是sn。

sn=6+66+666+…+66…66(n个6)。

假设你已经知道了数字n,那么,你能帮李某人求出sn么?

输入格式: 输入一个正整数n,n的范围是[0,10)。

输出格式: 输出Sn的值。

输入样例: 2

输出样例: 72

编译程序

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n = in.nextInt(); int[] a = {0, 6, 66, 666, 6666, 66666, 666666,6666666, 66666666, 666666666}; int i, sum = 0; for(i = 0; i <= n; i++) sum += a[i]; System.out.println(sum); } }
  • 递归版本
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int input = in.nextInt(); if(input == 0) System.out.println(0); else System.out.println(sum_66(input)); } public static int sum_66(int n){ if(n == 1) return 6; else return sum_66(n-1)+sum_pow(n); } public static int sum_pow(int n){ int sum = 0; for(int i = 0; i < n; i++) sum = sum + (int)Math.pow(10, i) * 6; return sum; } }

本文标签: 习题java