日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java经典50题_JAVA经典算法50题(3)【面试+工作】

發布時間:2025/4/5 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java经典50题_JAVA经典算法50题(3)【面试+工作】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:JAVA經典算法50題(3)【面試+工作】

JAVA經典算法50題(3)【面試+工作】

【程序21】 題目:求1+2!+3!+...+20!的和。

1.程序分析:此程序只是把累加變成了累乘。

public class Demo21 {

public static void main(String[] args) {

long sum = 0;

long fac = 1;

for (int i = 1; i <= 20; i++) {

fac = fac * i;

sum += fac;

}

System.out.println(sum);

}

}

【程序22】 題目:利用遞歸方法求5!。

1.程序分析:遞歸公式:f(n)=f(n-1)*4!

import java.util.Scanner;

public class Demo22 {

public static long fac(int n) {

long value = 0;

if (n == 1 || n == 0) {

value = 1;

} else if (n > 1) {

value = n * fac(n - 1);

}

return value;

}

public static void main(String[] args) {

System.out.println("請輸入一個數:");

Scanner in = new Scanner(System.in);

int n = in.nextInt();

System.out.println(n + "的階乘為:" + fac(n));

}

}

【程序23】 題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩

歲。最后問第一個人,他說是10歲。請問第五個人多大?

1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道第四人的歲數,依次類推,推到第一人(10歲),再往回推。

直接求解:

public class Demo23 {

public static void main(String[] args) {

int n = 10;

for (int i = 0; i < 4; i++) {

n = n + 2;

}

System.out.println("第五個人" + n + "歲");

}

}

遞歸求解:

public class Demo23 {

public static int getAge(int n) {

if (n == 1) {

return 10;

}

return 2 + getAge(n - 1);

}

public static void main(String[] args) {

System.out.println("第五個的年齡為" + getAge(5));

}

}

【程序24】 題目:給一個不多于5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。

本題原方法:

import java.util.Scanner;

public class Demo24 {

public static void main(String[] args) {

Demo24 use = new Demo24();

System.out.println("請輸入:");

Scanner in = new Scanner(System.in);

long a = in.nextLong();

if (a < 0 || a >= 100000) {

System.out.println("Error Input, please run this program Again!");

System.exit(0);

}

if (a >= 0 && a <= 9) {

System.out.println(a + "是一位數");

System.out.println("按逆序輸出是:" + a);

} else if (a >= 10 && a <= 99) {

System.out.println(a + "是二位數");

System.out.println("按逆序輸出是:");

use.converse(a);

} else if (a >= 100 && a <= 999) {

System.out.println(a + "是三位數");

System.out.println("按逆序輸出是:");

use.converse(a);

} else if (a >= 1000 && a <= 9999) {

System.out.println(a + "是四位數");

System.out.println("按逆序輸出是:");

use.converse(a);

} else if (a >= 10000 && a <= 99999) {

System.out.println(a + "是五位數");

System.out.println("按逆序輸出是:");

use.converse(a);

}

}

public void converse(long l) {

String s = Long.toString(l);

char[] ch = s.toCharArray();

for (int i = ch.length - 1; i >= 0; i--) {

System.out.print(ch[i]);

}

}

}

個人版方法:

import java.util.Scanner;

public class Demo24 {

public static void main(String[] args) {

System.out.println("請輸入:");

Scanner in = new Scanner(System.in);

String str = in.next();

if (str.matches("d+")) { //正則表達式

System.out.println("輸入的是" + str.length() + "位數");

StringBuffer buf = new StringBuffer(str);

System.out.println(buf.reverse());//字符串反轉

}

}

}

【程序25】 題目:一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。

原方法:

import java.util.Scanner;

public class Demo25 {

static int[] a = new int[5];

static int[] b = new int[5];

public static void main(String[] args) {

boolean is = false;

System.out.println("Please input:");

Scanner in = new Scanner(System.in);

long l = in.nextLong();

if (l > 99999 || l < 10000) {

System.out.println("Input error, please input again!");

l = in.nextLong();

}

for (int i = 4; i >= 0; i--) {

a[i] = (int) (l / (long) Math.pow(10, i));

l = (l % (long) Math.pow(10, i));

}

System.out.println();

for (int i = 0, j = 0; i < 5; i++, j++) {

b[j] = a[i];

}

for (int i = 0, j = 4; i < 5; i++, j--) {

if (a[i] != b[j]) {

is = false;

break;

} else {

is = true;

}

}

if (is == false) {

System.out.println("is not a Palindrom!");

} else if (is == true) {

System.out.println("is a Palindrom!");

}

}

}

個人版:

import java.util.Scanner;

public class Demo25 {

public static void main(String[] args) {

System.out.println("請輸入:");

Scanner in = new Scanner(System.in);

String str = in.next();

int l = Integer.parseInt(str);//轉換成整數

if (l < 10000 || l > 99999) {

System.out.println("輸入錯誤!");

System.exit(0);

}

boolean is=false;

char[] ch = str.toCharArray();

for(int i=0;i

if(ch[i]!=ch[ch.length-i-1]){

is=false;

}else{

is=true;

}

}

if(is){

System.out.println("這是一個回文!");

}else{

System.out.println("不是一個回文!");

}

}

}

【程序26】 題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。

1.程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或if語句判斷第二個字母。

import java.util.Scanner;

public class Demo26 {

public static void main(String[] args) {

char weekSecond;//保存第二字母

Scanner in = new Scanner(System.in);//接收用戶輸入

System.out.println("請輸入星期的第一個字母:");

String letter = in.next();

if (letter.length() == 1) {//判斷用戶控制臺輸入字符串長度是否是一個字母

char weekFirst = letter.charAt(0);//取第一個字符

switch (weekFirst) {

case 'm':

case 'M':

System.out.println("星期一(Monday)");

break;

case 't':

case 'T':

System.out.print("由于星期二(Tuesday)與星期四(Thursday)均以字母T開頭,故需輸入第二個字母才能正確判斷:");

letter = in.next();

if (letter.length() == 1) {

weekSecond = letter.charAt(0);

if (weekSecond == 'U' || weekSecond == 'u') {

System.out.println("星期二(Tuesday)");

break;

} else if (weekSecond == 'H' || weekSecond == 'h') {

System.out.println("星期四(Thursday)");

break;

} else {

System.out.println("Error!");

break;

}

} else {

System.out.println("輸入錯誤,只能輸入一個字母,程序結束!");

break;

}

case 'w':

case 'W':

System.out.println("星期三(Wednesday)");

break;

case 'f':

case 'F':

System.out.println("星期五(Friday)");

break;

case 's':

case 'S':

System.out.print("由于星期六(Saturday)與星期日(Sunday)均以字母S開頭,故需輸入第二個字母才能正確判斷:");

letter = in.next();

if (letter.length() == 1) {

weekSecond = letter.charAt(0);

if (weekSecond == 'A' || weekSecond == 'a') {

System.out.println("星期六(Saturday)");

break;

} else if (weekSecond == 'U' || weekSecond == 'u') {

System.out.println("星期日(Sunday)");

break;

} else {

System.out.println("Error!");

break;

}

} else {

System.out.println("輸入錯誤,只能輸入一個字母,程序結束!");

break;

}

default:

System.out.println("輸入錯誤,不能識別的星期值第一個字母,程序結束!");

break;

}

} else {

System.out.println("輸入錯誤,只能輸入一個字母,程序結束!");

}

}

}

【程序27】 題目:求100之內的素數

public class Demo27 {

public static void main(String args[]) {

int sum, i;

for (sum = 2; sum <= 100; sum++) {

for (i = 2; i <= sum / 2; i++) {

if (sum % i == 0)

break;

}

if (i > sum / 2)

System.out.println(sum + "是素數");

}

}

}

public class Demo27{

public static void main(String args[]){

int w=1;

for(int i=2;i<=100;i++){

for(int j=2;j

w=i%j;

if(w==0)break;

}

if(w!=0)

System.out.println(i+"是素數");

}

}

}

【程序28】 題目:對10個數進行排序。

1.程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素交換,下次類推,即用第二個元素與后8個進行比較,并進行交換。

本例代碼為生成隨機10個數排序,并輸入1個數,插入重排序輸出:

import java.util.Arrays;

import java.util.Random;

import java.util.Scanner;

public class Demo28 {

public static void main(String[] args) {

int arr[] = new int[11];

Random r = new Random();

for (int i = 0; i < 10; i++) {

arr[i] = r.nextInt(100) + 1; //得到10個100以內的整數

}

Arrays.sort(arr);

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] +"t");

}

System.out.print("nPlease Input a int number:" );

Scanner in = new Scanner(System.in);

arr[10] = in.nextInt();

Arrays.sort(arr);

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] +"t");

}

}

}

個人代碼:

import java.util.Arrays;

import java.util.Scanner;

public class Demo28 {

public static void main(String[] args) {

System.out.println("請輸入10個數:");

Scanner in = new Scanner(System.in);

int[] arr = new int[10];

for (int i = 0; i < 10; i++) {

arr[i] = in.nextInt();

}

System.out.println("原數組為:");

for (int x : arr) {//foreach遍歷

System.out.print( x + "t");

}

Arrays.sort(arr);

System.out.println();

System.out.println("排序后為:");

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + "t");

}

}

}

【程序29】 題目:求一個3*3矩陣主對角線元素之和。

1.程序分析:利用雙重for循環控制輸入二維數組,再將a[i][i]累加后輸出。

public class Demo29 {

public static void main(String[] args) {

double sum = 0;

int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 7, 8 } };

for (int i = 0; i < 3; i++)

for (int j = 0; j < 3; j++) {

if (i == j)

sum = sum + array[i][j];

}

System.out.println(sum);

}

}

主負對角線:

for(i=0;i

for(j=0;j

{

if(i==j) sum1+=a[i][j];

if(i+j==n-1) sum2+=a[i][j];

}

【程序30】 題目:有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。

1.程序分析:首先判斷此數是否大于最后一個數,然后再考慮插入中間的數的情況,插入后此元素之后的數,依次后移一個位置。

import java.util.Random;

public class Demo30 {

public static void main(String[] args) {

int temp = 0;

int arr[] = new int[12];

Random r = new Random();

for (int i = 0; i <= 10; i++)

arr[i] = r.nextInt(1000);

for (int i = 0; i <= 10; i++)

System.out.print(arr[i] + "t");

for (int i = 0; i <= 9; i++)

for (int k = i + 1; k <= 10; k++)

if (arr[i] > arr[k]) {

temp = arr[i];

arr[i] = arr[k];

arr[k] = temp;

}

System.out.println();

for (int k = 0; k <= 10; k++)

System.out.print(arr[k] + "t");

arr[11] = r.nextInt(1000);

for (int k = 0; k <= 10; k++)

if (arr[k] > arr[11]) {

temp = arr[11];

for (int j = 11; j >= k + 1; j--)

arr[j] = arr[j - 1];

arr[k] = temp;

}

System.out.println();

for (int k = 0; k <= 11; k++)

System.out.print(arr[k] + "t");

}

責任編輯:

總結

以上是生活随笔為你收集整理的java经典50题_JAVA经典算法50题(3)【面试+工作】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。