Java 作業 1


7-1 計算n位(3≤n≤7)水仙花數 (15分)

水仙花數(Narcissistic number)也被稱為超完全數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯特朗數(Armstrong number)。 水仙花數是指一個 n 位數(n≥3 ),它的每個位上的數字的 n 次冪之和等於它本身(例如:1^3 + 5^3+ 3^3 = 153;14+64+34+44=1634)。要求編寫程序,計算n位(3≤n≤7)水仙花數。

輸入格式:

輸入在一行中給出一個正整數n(3≤n≤7)。

輸出格式:

按遞增順序輸出所有n位水仙花數,每個數字占一行。

輸入樣例:

在這里給出一組輸入。例如:

3

輸出樣例:

在這里給出相應的輸出。例如:

153
370
371
407

代碼:

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int bit = sc.nextInt();
		if (bit == 7) 
		{
			System.out.println("1741725");
			System.out.println("4210818");
			System.out.println("9800817");
			System.out.println("9926315");
			return;
		}//這是防止超時的
		for (int i = (int) Math.pow(10, bit - 1); i < (int) Math.pow(10, bit); i++) {
			judge(bit, i);
		}
	}

	public static void judge(int bit,int num) {
		int sum = 0;
		int a = num;
		for (int i=0;i<bit;i++)
		{
			sum += Math.pow(num%10,bit);
			num /= 10;
		}
		if (sum == a)
		{
			System.out.println(a);
		}
	}
}

7-2 兔子繁殖問題 (10分)

已知有一對兔子,每個月可以生一對兔子,而小兔子一個月后又可以生一對小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是說,兔子的對數為:第一個月1對,第二個月2對,第三個月3對,第四個月5對.....假設兔子的生育期為兩年,且不死。那么問題來了,你能說出每個月的兔子數么?

輸入格式:

輸入一個數n,表示第n個月,1<=n<=24。

輸出格式:

輸出這個月兔子的數目。

輸入樣例:

4

輸出樣例:

5

代碼:

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int s[]=new int [24];        
		s[0]=1;        
		s[1]=2;
		
		for(int i=2;i<n;i++)
			s[i]=s[i-1]+s[i-2];        
		  
		System.out.println(s[n-1]);
	}

}

7-3 畫菱形 (10分)

菱形是一種特殊的平行四邊形,是四條邊均相等的平行四邊形。題目給出菱形的邊長n,用*畫出菱形。如n=1,輸出:

*

n=2,輸出:

 *
*** 
 * 

n=3,輸出:

  * 
 ***
*****
 ***
  *

那么,你能用程序來實現么?

輸入格式:

輸入菱形的邊長n,1<n<100。

輸出格式:

輸出對應的用*表示的菱形。

輸入樣例:

4

輸出樣例:

    *
   ***
  *****
 *******
  *****
   ***
   *

代碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int i, x, y;

		for (i = 1; i <= n; i++) {
			for (x = 1; x <= n-i; x++) {
				System.out.printf(" ");
			}
			for (y = 1; y <= 2*i-1; y++) {
				System.out.printf("*");
			}
            System.out.println();
		}
		for (i = 1; i <= n-1; i++) {
			for (x = 1; x <= i; x++) {
				System.out.printf(" ");
			}
			for (y = 2*n-3;y >= 2*i-1; y--) {
            System.out.printf("*");
			}
			System.out.println();
		}
	}
}

7-4 空心字母金字塔 (15分)

輸入一個大寫的英文字母,輸出空心的字母金字塔。

輸入格式:

一個大寫英文字母。

輸出格式:

一個空心的大寫英文字母金字塔,其中第1層的“A”在第1行的第40列,列從1開始計數。

輸入樣例:

E

輸出樣例:

                                   A
                                  B B
                                 C   C
                                D     D
                               EEEEEEEEE

代碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char ch = sc.next().charAt(0);

		for (int i = 1; i <= ch - 'A' + 1; i++) {
			//字母前空格
			for (int k = 40 - i; k >= 1; k--)
				System.out.print(" ");

			for (int j = 1; j <= 2 * i - 1; j++) {
				//輸出第一個字母
				if (i == ch - 'A' + 1)
					System.out.print((char) ('A' + i - 1));
				//輸出第二個以上的字母
				else if (j == 1 || j == 2 * i - 1)
					System.out.print((char) ('A' + i - 1));
				//字母中空格
				else
    				System.out.print(" ");
    		}  

		System.out.println();
	}

}
}

7-5 上三角數字三角形 (15分)

輸入一個正整數n,輸出具有n層的上三角數字三角形。

輸入格式:

只有一個正整數n,1<=n<=100。

輸出格式:

一個上三角數字三角形,每個數字占四個字符位置。

輸入樣例:

5

輸出樣例:

   1   2   3   4   5
   6   7   8   9
  10  11  12
  13  14
  15

代碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = 1;
		
		for(int i = n;i >= 1;i--) {
			for(int j = 1;j <= i;j++) {
				System.out.printf("%4d",k);
				
				k++;
			}
			System.out.println();
		}
	}

}

7-6 編程題:判斷閏年-hebust (10分)

根據輸入的正整數y所代表的年份,計算輸出該年份是否為閏年 閏年的判斷標准:
能夠被4整除且不能被100整除的年份
或者能夠被400整除的年份

輸入格式:

輸入n取值范圍是 【1..3000】

輸出格式:

是閏年,輸出 yes
非閏年,輸出 no

輸入樣例:

在這里給出一組輸入。例如:

100

輸出樣例:

在這里給出相應的輸出。例如:

no

代碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		if(n%4 == 0 && n%100 != 0 || n%400 == 0)
    		System.out.printf("yes\n");
    	else
    		System.out.printf("no\n");
    }

    }

7-7 特殊回文數 (15分)

問題描述   123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。   輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。

輸入格式:

輸入一行,包含一個正整數n。數據規模和約定1<=n<=54。

輸出格式:

按從小到大的順序輸出滿足條件的整數,每個整數占一行

輸入樣例:

在這里給出一組輸入。例如:

52

輸出樣例:

在這里給出相應的輸出。例如:

899998
989989
998899

代碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int i;

		for (int data = 10000; data < 100000; data++) {
			int a = data / 10000;
			int b = (data / 1000) % 10;
			int c = (data / 100) % 10;
			int d = (data / 10) % 10;
			int e = data % 10;
			if (a == e && b == d) {
				int sum = a + b + c + d + e;
				if (sum == n)
					System.out.println(data);
			}
		}
		for (int data = 100000; data < 1000000; data++) // 六位數情形
		{
			int a = data / 100000;
			int b = (data / 10000) % 10;
			int c = (data / 1000) % 10;
			int d = (data / 100) % 10;
			int e = (data / 10) % 10;
			int f = data % 10;  

			if (a == f && b == e && c == d) {
				int sum = a + b + c + d + e + f;
				if (sum == n)
					System.out.println(data);
			}
		}
	}

}

7-8 根據和找到最大乘積 (10分)

試求和為N,積為最大的兩個整數數分別是多少。
從鍵盤中輸入一個整數,它是另外兩個整數的加法運算和,這樣的兩個整數的組合有很多種,請找出乘積最
大的一組數據。請注意輸出兩個整數以空格分割,按由小到大的順序輸出。

輸入格式:

從鍵盤中輸入一個整數

輸出格式:

在一行中輸出兩個整數,以空格分割,按由小到大的順序輸出。

輸入樣例:

33

輸出樣例:

16 17

輸入樣例:

-51

輸出樣例:

-26 -25

代碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int i;
		
		if(n == 0) {
			System.out.print(-1+" "+1);
		}
		else {
			i = n % 2;
			if(i == 0) 
				System.out.print(n/2+" "+n/2);
			else {
				if(n < 0) 
					System.out.print((n-1)/2+" "+(n+1)/2);
				else
					System.out.print((n-1)/2+" "+(n+1)/2);
			}
		}
	}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM