#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);
    }
}

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;
        this.pp = 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);
	}
 
}

這裏常見問題是,一個個輸入數,會超時,因此將他們讀成字符串,然後提取有效數據
具體詳解:作品評分

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);
		
	}
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章