1. 程式人生 > >JAVA基礎50題

JAVA基礎50題

個數字 remove rand equal throw 約瑟夫環 [] 根據 輸入

package package0530;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.logging.Logger;

/**
* 本類主要用於練習java基礎,放松放松
* @author xinxin
*/
public class FunctionClass {
static Logger log = Logger.getLogger("FunctionClass");
/*
* 程序1:
* 題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,
* 小兔子長到第三個月後每個月又生一對 兔子,假如兔子都不死,
* 問每個月的兔子總數為多少?
*/
public static int test1(int n){
//1 2 3 4 5 6 7 8 9
//1 1 2 3 5 8 13 21 34
int[] arr = new int[n+1];

arr[0] = 0;
arr[1] = 1;
for(int i = 2;i<=n;i++){
arr[i] = arr[i-2] + arr[i-1];
}
return arr[n]*2;
}

/*
* 程序2:
* 題目:判斷101-200之間有多少個素數,並輸出所有素數。
*/
public static void test2(){
for(int i = 101;i<=200;i++){
boolean b = true;
for(int j=2;j<i&&b;j++){
if(i % j ==0){
b = false;
}
}
if(b){
System.out.println("素數:"+i);
}
}
}

/*
* 程序3:
* 題目:打印出所有的 "水仙花數 ",所謂 "水仙花數 "是指一個三位數,
* 其各位數字立方和等於該數本身。
* 例如:153是一個 "水仙花數 ",因為153=1的三次方+5的三次方+3的三次方。
*/
public static void test3(){
for(int i = 100;i<1000;i++){
int b = i/100;
int s = i%100/10;
int g = i%10;
if(i == b*b*b+s*s*s+g*g*g){
System.out.println("我是水仙花數:"+i);
}
}
}

/*
* 程序4:
* 題目:將一個正整數分解質因式。例如:輸入90,打印出90=2*3*3*5;
* 思路:先求這個正整數的所有的質數
*/
public static void test4(int n){
List<Integer> li1 = new ArrayList<Integer>();
List<Integer> li2 = new ArrayList<Integer>();
//求所有質數
flag:for(int i=2;i<=n;i++){
for(int j=2;j<i;j++){
if(i%j==0){
continue flag;
}
}
li1.add(i);
}
//求所有質因數
for(Integer pn:li1){
int num1 = n%pn;
int num2 = n/pn;
while(num1==0){
li2.add(pn);
num1 = num2%pn;
num2 = num2/pn;
}
}
//處理邏輯,拼接字符串
StringBuilder sb = new StringBuilder();
sb.append(n+"=");
for(Integer pn:li2){
sb.append(pn+"*");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb.toString());
}

/*
* 程序4:更好的答案
*/
public static void test4s(int n){
int k = 1;
System.out.println(n+"=");
while(k<=n){
if(k==n){
System.out.println(n);
break;
}else if(n%k==0){
System.out.print(k+"*");
n = n/k;
}else{
k++;
}
}
}

/*
* 程序5:
* 利用條件運算符的嵌套來完成此題:學習成績 >=90分的同學用A表示,
* 60~89分之間用B表示,60分以下用C表示
*/
public static void test5(double d){
char c;
c = d>90 ? ‘A‘ : (d>=60) ? ‘B‘ : ‘C‘;
System.out.println(c);
}

/*
* 程序6:
* 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
* 最大公約數記法:(a,b)
* 最小公倍數記法:[a,b]
*/
public static void test6(int m,int n){
int temp = n*m;
int t = 0;
while(m%n!=0){//輾轉相除法
t = n;
n = m%n;
m = t;
}
System.out.println("最大公約數:"+n);
System.out.println("最小公倍數:"+temp/n);
}

/*
* 程序7:
* 題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
*/
public static void test7(String str){
char[] ch = str.toCharArray();
int blank = 0;
int character = 0;
int number=0;
int other=0;
for(int i = 0;i<ch.length;i++){
if(ch[i] == ‘ ‘){
blank++;
}else if((‘A‘<=ch[i]&&ch[i]<=‘Z‘)||(‘a‘<=ch[i]&&ch[i]<=‘z‘)){
character++;
}else if(‘0‘<=ch[i]&&ch[i]<=‘9‘){
number++;
}else{
other++;
}
}
System.out.println("字符串為:"+str);
System.out.println("英文字符個數:"+character);
System.out.println("空格的個數:"+blank);
System.out.println("數字的個數"+number);
System.out.println("其它字符的個數:"+other);
}

/*
* 程序8:
* 題目:求s = a + aa + aaa + aaaa +aa...a的值,其中a是一個數字。
* 例如: 2 + 22 + 222 + 2222 + 22222(此時共有5個數字相加)
* 幾個數相加有鍵盤控制。
*/
/**
*
* @param a 相當於數字a
* @param n 一共 有多少個數字相加
*/
//2 3 2+22+222
public static void test8(int a,int n){
int temp = a,i=0,sum =0;
while(i<n){
sum = sum + temp;
temp = temp*10+a;
i++;
}
System.out.println("總和為:"+sum);
}

/*
* 程序9:
* 題目:一個數如果恰好等於它的因子之和,這個數就稱為“完數”。
* 例如:6 = 1+2+3
* 請找出1000以內的所有完數。
*/
public static void test9(){
List<Integer> arr;
for(int i = 1;i<1000;i++){
arr = new LinkedList<Integer>();
for(int j=1;j<i;j++){
if(i%j==0) arr.add(j);
}
int sum = 0;
for(Integer in:arr){
sum +=in;
}
if(sum==i)
System.out.println("我是完數:"+i);
}
}

/*
* 程序10:
* 題目:一個球從100米高度落下,每次落地後反跳回原高度一半;
* 再落下,求他在第10次落地時,共經過多少米?第10次 反彈多高?
*/
/*
* 分析:
* 第1次落地:共經過 100 米,反彈 50 米;
* 第2次落地:共經過 200 米,反彈 25 米;
* 第3次落地:共經過 250 米,反彈 25/2 米;
* 第4次落地:共經過 275 米,反彈 25/2/2 米;
* 第5次落地:共經過 287.5 米,反彈 25/2/2/2 米;
*/
/**
* @param n 第幾次落地
*/
public static void test10(int n){
double totalJournay = 100;
double reboundHeight = 0;
double initHeight = 100;
int kk = 1;
for(int i = 1;i<=n;i++){
kk *=2;
totalJournay += 2*reboundHeight;
reboundHeight = initHeight/kk;
}
System.out.println("第"+n+"次落地,共經過"+totalJournay+"米 , 反彈高度為"+reboundHeight);
}

/*
* 程序11:
* 題目:有1,2,3,4四個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
*/
public static void test11(){
int count = 0;
for(int i = 1;i<=4;i++){
for(int j = 1;j<=4;j++){
for(int k = 1;k<=4;k++){
if(i!=j&&i!=k&&j!=k){
System.out.println(i*100+j*10+k);
count++;
}
}
}
}
System.out.println("count:"+count);
}

/*
* 程序12:
* 題目:企業發的獎金根據利潤提成。利潤低於或等於10萬元時,獎金可提10%;利潤高於10萬元,
* 低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40
* 萬之間時,高於20萬的部分,可提成5%;40萬到60萬之間時,高於40萬的部分,可提成3%;
* 60萬到100萬之間時,高於60萬的部分,可提成1.5%;高於100萬元時,超過100萬元的部分按
* 1%提成,從鍵盤輸入當月利潤,求應發放獎金總數?
*/
public static void test12(){
double salary = 0.0; //獎金
Scanner sc = new Scanner(System.in);
Double d = sc.nextDouble(); //利潤
if(d<0){
try {
throw new Exception("你別輸入負數啊,朋友!");
} catch (Exception e) {
System.err.println(e.getMessage());
return;
}
}
if(d<=10){
salary = d*0.1;
}else if(d<20){
salary = 10*0.1+(d-10)*0.075;
}else if(d<40){
salary = 10*0.1 + 10*0.075 + (d-20)*0.05;
}else if(d<60){
salary = 10*0.1 + 10*0.075 + 20*0.05 + (d-40)*0.03;
}else if(d<100){
salary = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + (d-60)*0.015;
}else{
salary = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + 40*0.015 +(d-100)*0.01;
}
DecimalFormat df = new DecimalFormat("#.0000");
System.out.println("當月應發獎金總額為"+df.format(salary)+"萬元!");
System.out.println(String.format("%.4f", salary));
}

/*
* 程序13:
* 題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,
* 請問該數是多少?
*/
public static void test13(){
int i = 0;
while(true){//寫了一個死循環,看看後面怎麽跑的
if(Math.sqrt(i+100)%1==0&&Math.sqrt(i+268)%1==0){
System.out.println(i);
}
i++;//i--;也行
}
}

/*
* 程序14:
* 題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
*/
public static void test14(int year,int month,int day){
int days = 0;
int sum = 0;
for(int i=1;i<month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if((year%400)==0||(year%4==0&&year%100!=0)){
days = 29;
}else{
days = 28;
}
break;
}
sum +=days;
}
System.out.println(year+"年"+month+"月"+day+"日 是這一年的第"+(day+sum)+"天!");
}

/*
* 程序15:
* 題目:輸入3個整數x,y,z,請把這三個數從小到大輸出。
*/
public static void test15(int x,int y,int z){
int[] arr = new int[]{x,y,z};
/*選擇排序
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}*/
//冒泡排序
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}

/*
* 程序16:
* 題目:輸出9*9乘法口訣。
*/
public static void test16(){
System.err.println(" 9*9乘法口訣表");
System.out.println();
flag:for(int i=1;i<10;i++){
for(int j=1;j<10;j++){
if(i<j){
System.out.println();
continue flag;
}
System.out.print(i+"*"+j+"="+i*j+"\t");
}

}
}
//這種方法實現更方便
public static void test16s(){
for(int i = 1;i<10;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
if(i==j)
System.out.print("\n");
}
}
}

/*
* 程序17:
* 題目:猴子吃桃問題。猴子第一天摘下若幹個桃子 ,當即吃了一半,
* 還不過癮,又多吃了一個,第二天早晨又將剩下的桃子吃了一半,又多吃了
* 一個。以後每一天早晨都吃了前一天剩下的一半零一個。到第10天早晨想再
* 吃時,發現只剩下一個桃子了。求第一天共摘了多少?
*/
public static void test17(){
/*
* 10:1
* 9 :4
* 8 :10
* 7 :22
*/
int s = 1;
for(int i = 2;i<11;i++){
s = (s+1)*2;
}
System.out.println("第一天共摘了"+s+"個桃子!");
}

/*
* 程序18:
* 題目:兩個乒乓球隊比賽,各出三人。甲隊為a,b,c三人,乙對為x,y,z三人。已抽簽決定比賽名單。
* 有人向隊員打聽比賽的名單。a說 他不和x比,c不和x、z比。請編程,找出三隊賽手的名單。
*/
/*
* a-->z
* b-->x
* c-->y
*/
public static void test18(){
for(char i =‘x‘;i<=‘z‘;i++){
for(char j =‘x‘;j<=‘z‘;j++){
for(char k =‘x‘;k<=‘z‘;k++){
if(i!=j&&i!=k&&j!=k&&i!=‘x‘&&k!=‘x‘&&k!=‘z‘){
System.out.println("a vs "+i+"||b vs "+j+"||c vs "+k);
}
}
}
}
}

/*
* 程序19:
* 題目:打印出如下圖形(菱形)
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*/
public static void test19(){
//上半部分
for(int i= 1;i<=4;i++){
for(int j=4;j>i;j--){
System.out.print(" ");
}
for(int k=2*i-1;k>=1;k--){
System.out.print("*");
}
System.out.println();
}
//下半部分
for(int i=3;i>=1;i--){
for(int j=3;j>=i;j--){
System.out.print(" ");
}
for(int k=2*i-1;k>=1;k--){
System.out.print("*");
}
System.out.println();
}
}

/*
* 程序20:
* 題目:有一分數序列:2/1 , 3/2 ,5/3,8/5;13/8;21/13
* 求出這個數列前20項之和。
*/
public static void test20(){
double sum = 0;
double n1 = 2,n2 =1;
for(int i=1;i<=20;i++){
sum +=(double)n1/n2;
double t = n1;
n1 = n1 + n2;
n2 = t;
}
System.out.println(sum);
}

/*
* 程序21:
* 題目:求1+2!+3!+...+20!的和。
*/
public static void test21(){


long sum = 0;
for(int i=1;i<=20;i++){
long num = 1;
for(int j=1;j<=i;j++){
num *=j;
}
sum +=num;
}
System.out.println("總和為:"+sum);
}

/*
* 程序22:
* 題目:利用遞歸的方法求5!。
*/
public static int test22(int n){
if(n==1){
return 1;
}
return n*test22(n-1);
}

/*
* 程序23:
* 題目:有5個人坐在一起,問第五個人多少歲?
* 他說他比第四個人大2歲。問第四個人歲數,他說他比第三個人大2歲。
* 問第三個人,又說比第二個人大2歲。問第二個人,他說他比第一個人大2歲。
* 問第一個人,他說他是10歲。請問第五個人多大?
*/
public static void test23(){
int age = 10;
for(int i = 1;i<=5;i++){
age +=2;
}
System.out.println("第五個人歲數是 : "+age);
}

/*
* 程序24:
* 題目:給一個不多於5位的正整數,要求:
* 一、求它是幾位數;
* 二、逆序打印各位數字。
*/
public static void test24(){
int num = (int)(Math.random()*99999+1);
System.out.println(num);
int len = Integer.toString(num).length();
LinkedList<Integer> link = new LinkedList<Integer>();
for(int i = 1;i<=len;i++){
int remainder = num%10;
link.add(remainder);
num = num/10;
}
System.out.println(link);
}

/*
* 程序25:
* 題目:一個五位數,判斷它是不是回文數。即12321是回文數,個位
* 與萬位相同,十位與千位相同。
*/
public static void test25(){
int num = (int)(Math.random()*90000+10000);
System.out.println(num);
String strNumber = Integer.toString(num);
if(strNumber.substring(0, 1).equals(strNumber.substring(4))&&strNumber.substring(1, 2).equals(strNumber.substring(3, 4))){
System.out.println(strNumber+"是回文數!");
}else{
System.out.println(strNumber+"不是回文數!");
}
}

/*
* 程序26:
* 題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,
* 則繼續判斷第二個字母。
*/
/*
* monday
* tuesday
* wednesday
* thursday
* friday
* saturday
* sunday
*/
public static void test26() {
Scanner sc = new Scanner(System.in);
String str = sc.next().toLowerCase();
System.out.println("str :" + str);
char c = str.charAt(0);
String param = "";
char c2 = ‘ ‘;
switch (c) {
case ‘m‘:
param = "星期一";
break;
case ‘w‘:
param = "星期三";
break;
case ‘f‘:
param = "星期五";
break;
case ‘t‘:
c2 = new Scanner(System.in).next().toLowerCase().charAt(0);
if (c2 == ‘u‘)
param = "星期二";
if (c2 == ‘h‘)
param = "星期四";
System.out.println("你輸入 錯了!");
break;
case ‘s‘:
c2 = new Scanner(System.in).next().toLowerCase().charAt(0);
if (c2 == ‘a‘)
param = "星期六";
if (c2 == ‘u‘)
param = "星期日";
System.out.println("你輸入 錯了!");
break;
default:
System.out.println("你輸入 錯了!");
}
System.out.println("你輸入的字母"+c+c2+"對應的是"+param);
}

/*
* 程序27:
* 題目:求100之內的素數。
*/
public static void test27(){
flag:for(int i=2;i<=100;i++){
for(int j=2;j<=i-1;j++){
if(i%j==0){
continue flag;
}
}
System.out.println("100以內的素數有"+i);
}
}

/*
* 程序28:
* 題目:對十個數進行排序。
*/
public static void test28(){
int[] arr =new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100+1);
}
System.out.println(Arrays.toString(arr));
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
System.out.println(Arrays.toString(arr));
}

/*
* 程序29:
* 題目:求一個3*3矩陣對角線元素之和
*/
public static void test29(){
int[][] arr = new int[3][3];
int sum = 0;
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
arr[i][j] = (int)(Math.random()*100+1);
System.out.print(arr[i][j]+"\t");
if(i==j||i+j==2){
sum +=arr[i][j];
}
}
System.out.println();
}
System.err.println("------------分割線----------------\n"+sum);
}

/*
* 程序30:
* 題目:有一個已經排好序的數組。現輸入一個數,要求按照原來的規律將
* 它插入到數組中。
*/
public static void test30(){
//假設現在有一個長度為10的數組,不妨設該數組是倒序排列
int[] arr = new int[10];
for(int i=0;i<=9;i++){
arr[i] = (int)(Math.random()*30+1);
}
System.err.println(Arrays.toString(arr));
//這次我們用選擇排序
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
//先隨機生產一個數
int key = (int)(Math.random()*100+1);
System.out.println("key:"+key);
//假設我們不知道這個數組是正序還是到序
int[] targetArr;
if(arr[0]>=arr[9]){
System.out.println("這個數組是倒序排列的!");
targetArr = new int[arr.length+1];
System.out.println("targetArr長度:"+targetArr.length);
int i;
for(i=0;i<arr.length;i++){
if(arr[i]>key){
targetArr[i] = arr[i];
}else{
targetArr[i] = key;
break;
}
}
for(int j=i+1;j<targetArr.length;j++){
targetArr[j] = arr[j-1];
}
System.out.println("targetArr:"+Arrays.toString(targetArr));
}else{
System.out.println("這個數組是正序排列的!");//和上面同理
targetArr = new int[arr.length+1];
}
}

/*
* 程序31:
* 題目:將一個數組逆序輸出。
*/
public static void test31(){
int[] arr1 = new int[10];
int[] arr2 = new int[10];
for(int i=0;i<arr1.length;i++){
arr1[i] = (int)(Math.random()*100+1);
}
System.out.println("arr1"+Arrays.toString(arr1));
for(int i=0;i<arr1.length;i++){
arr2[i] = arr1[9-i];
}
System.out.println("arr2"+Arrays.toString(arr2));
}

/*
* 程序32:
* 題目:取一個整數a從右端開始的4~7位。
*/
/*
* 分析:
* 這個整數a應該大於7位才有意義,隨機生成一個7位數吧
*/
public static void test32(){
int num = (int)(Math.random()*9000000+1000000);
System.out.println(num);
String str = Integer.toString(num);
char[] ch = str.toCharArray();
int i = 0;
System.out.println(ch);
while(i<ch.length/2){
char c = ch[i];
ch[i] = ch[ch.length-1-i];
ch[ch.length-1-i] = c;
i++;
}
System.out.println(ch);
String s="";
for(int j=3;j<=6;j++){
s += ch[j];
}
System.out.println("結果是"+s);
}

/*
* 程序33:
* 題目:打印出楊輝三角
*/
public static void test33(){
for(int i=1;i<=10;i++){
}
}

/*
* 程序34:
* 題目:輸入三個數a,b,c,按大小順序輸出。(不妨有小到大吧)
*/
public static void test34(){
Scanner sc = new Scanner(System.in);
System.out.println("請按順序輸入a,b,c:");
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
System.out.println("a="+a+", b="+b+", c="+c);
if(a>=b){
if(c>=a){
System.out.println(b+" "+a+" "+c);
}else{
if(c<=b){
System.out.println(c+ " "+b+" "+a);
}else{
System.out.println(b+" "+c+" "+a);
}
}
}else{ //a<b
if(c>=b){
System.out.println(a+" "+b+" "+c);
}else
if(c<=a) System.out.println(c+" "+a+" "+b);
else System.out.println(a+" "+c+" "+b);
}
}

/*
* 程序35:
* 題目:輸入數組,最大與第一個元素交換,最小與最後一個元素交換,輸出數組。
*/
public static void test35(){
//隨機生成一個長度為8的數組
int[] arr = new int[8];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*30+1);
}
System.out.println(Arrays.toString(arr));
int max = arr[0],min = arr[0];
int a=0,b=0;
for(int i=1;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
a = i;
}

if(min>arr[i]){
min = arr[i];
b = i;
}
}
System.out.println("max="+max+",a = "+a);
System.out.println("min="+min+",b = "+b);

if(arr[0]!=arr[a]){
int temp = arr[0];
arr[0] = arr[a];
arr[a] = temp;
}
if(arr[arr.length-1]!=arr[b]){
int temp =arr[arr.length-1];
arr[arr.length-1] = arr[b];
arr[b] = temp;
}
System.out.println(Arrays.toString(arr));
}

/*
* 程序36:
* 題目:有n個整數,使其前面各數順序向後移動m個位置,最後m個數變成最前面的m個數。
*/
public static void test36(int len,int m){
int st = m;
int[] arr1 = new int[len];
int[] arr2 = new int[len];
int j=0;
for(int i=0;i<arr1.length;i++){
arr1[i] = (int)(Math.random()*100+1);
if(m<len){
arr2[m] = arr1[i];
m++;
}
if(i>=arr2.length-st){
arr2[j] = arr1[i];
j++;
}
}
System.out.println("arr1"+Arrays.toString(arr1));
System.out.println("arr2"+Arrays.toString(arr2));
}

/*
* 程序37:
* “約瑟夫環”問題
* 題目:有n個人圍成一個圈,順序排號。從第一個人開始報數(從1到3報數),凡是報3
* 的人退出圈子,問最後留下來的人是原來的第幾號?
*/
public static void test37(int n){
List<Integer> list = new LinkedList<Integer>();
for(int i=0;i<n;i++){
list.add(i+1);
}
System.out.println(list);
int index = -1;
while(list.size()>1){
index = (index+3)%list.size();
list.remove(index--);
}
System.out.println(list.get(0));
}

/*
* 程序38:
* 題目:寫一個函數,求一個字符串的長度.
*/
public static void test38(String str){
if(str==null){
try {
throw new Exception("你輸入的數字字符串為空!");
} catch (Exception e) {
System.err.println(e.getMessage());
return;
}
}
char[] ch = str.toCharArray();
System.out.println(Arrays.toString(ch));
System.out.println(ch.length);
}

/*
* 程序39:
* 題目:編寫一個函數,輸入n為偶數時,調用函數求
* 1/2+1/4+...+1/n;當輸入n為奇數時,調用函數
* 1/1+1/3+...+1/n
*/
public static void test39(){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double d = 0;
if(n%2==0){
for(int i=1;i<=n/2;i++){
d +=(double)1/(2*i);
}
}else{
for(int i=1;i<=n;i++){
if(i%2!=0){
d +=(double)1/i;
}
}
}
System.out.println(d);
}

/*
* 程序40:
* 題目:給一組字符串排序。
*/
public static void test40(){
Set<String> set = new TreeSet<String>();
set.add("abc");
set.add("abb");
set.add("bbb");
set.add("ccc");
System.out.println(set);
}

/*
* 程序41:
* 題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子平均分為5份,多了一個,
* 這只猴子把多的一個扔進海中,拿走了一份。第二只猴子把剩下的桃子又平均分成5份,又多了
* 一個,它同樣把多的一個扔進海中,拿走了一份。第三、第四、第五只猴子都是這樣做的,問海灘上
* 原來有多少只桃子?
*/
public static void test41(){
int i=1;
while(i<10000){
int temp = i;
int count = 1;
for(int j=1;j<=5;j++){
if((temp%5)==1){
temp = (int) ((temp-1)*0.8);
count++;
if(count==6){
System.out.println(i);
break;
}
}
}
i++;
}
}

/*
* 程序42:
* 題目:809*?? = 800*??+9*??
* 其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。
* 求??代表的兩位數,及809*??的結果。
*/
public static void test42(){
for(int i =10;i<=99;i++){
if(809*i==(800*i+9*i) && (8*i>=10 && 8*i<100)&& (9*i>=100 && 9*i<1000)){
System.out.println(i);
}
}
}

/*
* 程序43:
* 題目:求0-7所能組成的奇數的個數。
* 改為:求0-7所能組成的奇數的個數。(各個位數上的數字不能重復)
*/
public static void test43(){
//4 4*6 4*6*6 4*6*6*5 4*6*6*5*4 4*6*6*5*4*3
//4*6*6*5*4*3*2
long lon = 0L;
for(int i=8;i>0;i--){
if(i==8)
lon = 4;
if(i==7)
lon = lon+4*6;
lon +=lon*i;
}
System.out.println(lon);
}

/*
* 程序44:
* 題目:一個偶數總能表示為兩個素數之和。
* 轉換為:隨機生成一個大於等於8的偶數,然後求
* 它的質數,並且它的質數和等於這個數字。
*/
public static void test44(){
int targetNumber = 0;
while(true){
targetNumber = (int)(Math.random()*100+1);
if(targetNumber>=8 && targetNumber%2==0) break;
}
System.out.println(targetNumber);
flag:
for(int i=2;i<targetNumber;i++){
if(i%2==1 && ((targetNumber-i)%2==1)){
for(int j=2;j<i;j++){
if(i%j==0){
continue flag;
}
}
for(int j=2;j<targetNumber-i;j++){
if((targetNumber-i)%j==0){
continue flag;
}
}
System.out.println(i+" "+(targetNumber-i));
}
}
}

/*
* 程序45:
* 題目:判斷一個整數能被幾個9整除。
*/
public static void test45(int num){
int count=0;
while(num%9==0){
count++;
num /=9;
}
System.out.println(num+" 能被 "+count+"個9整除!");
}

/*
* 程序46:
* 題目:兩個字符串連接。
*/
public static void test46(){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
StringBuilder sb = new StringBuilder();
sb.append(str1).append(str2);
String str = sb.toString();
System.out.println(str);
}

/*
* 程序47:
* 題目:讀取7個數(1-50)的整數值,每讀取一個值,程序打印出該值的個數* 。
*/
public static void test47(){
Scanner sc = new Scanner(System.in);
for(int i=0;i<7;i++){
int temp = sc.nextInt();
if(!(temp>=1&&temp<=50)){
System.out.println("請輸入1-50的數字");
return;
}
for(int j=1;j<=temp;j++){
System.out.print("*");
}
System.out.println();
}
}

/*
* 程序48:
* 題目:某個公司采用公用電話傳遞數據,數據是4位的整數,在傳遞過程中是加密的,加密規則如下,
* 每位數字都加上5,然後用和除以10的余數代替該數字,再將第一位和第四位交換,第二位和第三位交換。
*/
public static void test48(int num){
System.out.println("未加密前的數據是 num :"+num);
String regex = "[1-9][0-9]{3}";
String temp = Integer.toString(num);
if(!(temp.matches(regex))){
try {
throw new Exception("該數字不是4位整數");
} catch (Exception e) {
System.err.println(e.getMessage());
return;
}
}

int g = num%10;
int s = num/10%10;
int b = num/100%10;
int q = num/1000;
int[] arr = {q,b,s,g};
for(int i=0;i<arr.length;i++){
arr[i] +=5;
arr[i] %=10;
}
// System.out.println(Arrays.toString(arr));
for(int i=0;i<arr.length/2;i++){
int t = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = t;
}
System.out.print("加密後的數據是 num :");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
}
/*
* 程序49:
* 題目:計算字符串中子字符串出現的次數。
*/
public static void test49(String fatherStr,String sonStr){
String[] strArr = fatherStr.split(sonStr);
System.out.println(strArr.length-1);
}
/*
* 程序50:
* 題目:有5個學生,每個學生有三門課的成績,從鍵盤輸入以上數據(包括學生號、姓名、
* 三門課成績),計算出平均成績,把原有的數據和計算出的平均分數存放在磁盤文件“stud”中,
*/
public static void test50() throws IOException{
List<String> list = new LinkedList<String>();
Scanner sc = new Scanner(System.in);
String temp = null;
for(int k=0;k<=4;k++){
System.out.println("請輸入有學號、姓名、語文成績、數學成績、外語成績:");
temp = sc.nextLine();
String[] strArr = temp.split("\\、");
double dou = 0.0,avg=0.0;
for(int i=2;i<strArr.length;i++){
dou += Double.parseDouble(strArr[i]);
}
avg = dou/3;
list.add(temp+"、"+avg);
System.out.println(temp+"、"+avg);
}
System.out.println(list);
File file = new File("C:\\Users\\xinxin\\Desktop\\stud.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for(String s:list){
bw.write(s+"\r\n");
}
bw.flush();
bw.close();
}
}

JAVA基礎50題