java经典50题_JAVA经典算法50题(3)【面试+工作】
原標(biāo)題:JAVA經(jīng)典算法50題(3)【面試+工作】
JAVA經(jīng)典算法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("請輸入一個數(shù):");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(n + "的階乘為:" + fac(n));
}
}
【程序23】 題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩
歲。最后問第一個人,他說是10歲。請問第五個人多大?
1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(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位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字。
本題原方法:
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 + "是一位數(shù)");
System.out.println("按逆序輸出是:" + a);
} else if (a >= 10 && a <= 99) {
System.out.println(a + "是二位數(shù)");
System.out.println("按逆序輸出是:");
use.converse(a);
} else if (a >= 100 && a <= 999) {
System.out.println(a + "是三位數(shù)");
System.out.println("按逆序輸出是:");
use.converse(a);
} else if (a >= 1000 && a <= 9999) {
System.out.println(a + "是四位數(shù)");
System.out.println("按逆序輸出是:");
use.converse(a);
} else if (a >= 10000 && a <= 99999) {
System.out.println(a + "是五位數(shù)");
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+")) { //正則表達(dá)式
System.out.println("輸入的是" + str.length() + "位數(shù)");
StringBuffer buf = new StringBuffer(str);
System.out.println(buf.reverse());//字符串反轉(zhuǎn)
}
}
}
【程序25】 題目:一個5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個位與萬位相同,十位與千位相同。
原方法:
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);//轉(zhuǎn)換成整數(shù)
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】 題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續(xù)判斷第二個字母。
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("輸入錯誤,只能輸入一個字母,程序結(jié)束!");
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("輸入錯誤,只能輸入一個字母,程序結(jié)束!");
break;
}
default:
System.out.println("輸入錯誤,不能識別的星期值第一個字母,程序結(jié)束!");
break;
}
} else {
System.out.println("輸入錯誤,只能輸入一個字母,程序結(jié)束!");
}
}
}
【程序27】 題目:求100之內(nèi)的素?cái)?shù)
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 + "是素?cái)?shù)");
}
}
}
或
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+"是素?cái)?shù)");
}
}
}
【程序28】 題目:對10個數(shù)進(jìn)行排序。
1.程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素交換,下次類推,即用第二個元素與后8個進(jìn)行比較,并進(jìn)行交換。
本例代碼為生成隨機(jī)10個數(shù)排序,并輸入1個數(shù),插入重排序輸出:
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以內(nèi)的整數(shù)
}
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個數(shù):");
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("原數(shù)組為:");
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循環(huán)控制輸入二維數(shù)組,再將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);
}
}
主負(fù)對角線:
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】 題目:有一個已經(jīng)排好序的數(shù)組?,F(xiàn)輸入一個數(shù),要求按原來的規(guī)律將它插入數(shù)組中。
1.程序分析:首先判斷此數(shù)是否大于最后一個數(shù),然后再考慮插入中間的數(shù)的情況,插入后此元素之后的數(shù),依次后移一個位置。
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");
}
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的java经典50题_JAVA经典算法50题(3)【面试+工作】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java snack_JSONPath小
- 下一篇: jetty java 实例_Maven+