package question; import java.util.Scanner; public class Test11_20 { /* * 輸入一個數據n,計算斐波那契數列的第n個值 並打印因此值 * 1 1 2 3 5 8 13 * 規律一個數等於前兩個數之和 */ public void test11(){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int f1 = 1,f2 = 1; int sum = 0; //輸出f1 f2 System.out.print("打印因此值:"); System.out.print(f1+" "); System.out.print(f2+" "); //從第三個開始,前面已經打印兩個數了,因此n-2 for(int i=0; i<n-2; i++){ sum = f1+f2; System.out.print(sum+" ");//打印因此數 f1 = f2; f2 = sum; } System.out.println(); System.out.println("第n個值是:sum="+sum);//打印第n個數 /* * 結果: 8 打印因此值:1 1 2 3 5 8 13 21 第n個值是:sum=21 */ } /***************************************************/ //使用遞歸求斐波那契數列第n個數 public int test12(int n){ if(n==1||n==2){ return 1; }else{ return test12(n-1)+test12(n-2); } } /***************************************************/ /* * 求1-1/3+1/5-1/7+1/9.....的值 */ public void test13(){ double sum=1;//做爲第一個數1 double fz = -1.0;//做爲第二個數的分子 double fm = 3.0;//第二個數的分母 for(int i=0; i<20; i++){ sum = sum+fz/fm; fz *= -1;//下一次運算將分子變爲相反數 fm += 2; //分母每次加2 } System.out.println(sum); } /***************************************************/ /* *在屏幕上打印出n行的金字塔圖案 * * * *** * ***** */ public void test14(){ for(int i=1; i<10; i++){ for(int j=0; j<10-i; j++){ System.out.print(" "); } for(int k=0; k<2*i-1; k++){ System.out.print("*"); } System.out.println(); } } /***************************************************/ /* * 歌巴德猜測,任何一個大於6的偶數均可以拆分紅兩個質數的和 * 打印全部的可能 */ //是不是質數 private boolean isPrime(int n){ if(n==1){ return false; } for(int i=2; i<=Math.sqrt(n); i++){ if(n%i==0){ //System.out.println(i); return false; } } return true; } // public void test15(){ Scanner sc = new Scanner(System.in); int n = sc.nextInt();//n大於6 且是偶數, if(n%2!=0){ System.out.println("不能爲奇數"); return; } if(n<6){ System.out.println("不能小於6"); return; } for(int i=3; i<n/2; i++){ if(isPrime(i)&&isPrime(n-i)){//都不爲質數時 System.out.println(i+"+"+(n-i)+"="+n);//打印全部的可能 } } } /***************************************************/ /* * 定義一個int型的數組,包含十個元素分別賦一些隨機數,而後求出全部元素的最大值 * 最小值,平均值,和值,並輸出出來 */ public void test16(){ int[] arr = new int[10]; System.out.println("如下是十個隨機數!"); for(int i=0; i<10; i++){ //隨機生成十個數 介於0到100 arr[i] = (int)(Math.random()*100); } for(int i=0; i<10; i++){ System.out.print(arr[i]+" "); } System.out.println();//換行 System.out.println("和等於:"+sum(arr)); System.out.println("平均值等於:"+sum(arr)/10); sort(arr); System.out.println("最大值"+arr[arr.length-1]); System.out.println("最小值:"+arr[0]); /*如下是十個隨機數! 4 87 68 7 88 84 40 4 20 47 和等於:449 平均值等於:44 最大值88 最小值:4 */ } //求和 private int sum(int[] a){ int sum = 0;//求數組和 for(int i=0; i<a.length; i++){ sum+=a[i]; } return sum; } //冒泡排序 升序 private void sort(int[] arr){ for(int i=0; i<arr.length; i++){ for(int j=i; j<arr.length; j++){ if(arr[j]<arr[i]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } /*****************************************/ /* * 定義一個一維數組 包含十個元素,分別賦值1到10,而後將數組中的元素向前 * 移動一個位置a[0]=a[1]...最後一個數等於a[0] */ public void test17(){ int[] arr = new int[10]; System.out.println("如下是十個隨機數!"); for(int i=0; i<10; i++){ //隨機生成十個數 介於0到10 arr[i] = (int)(Math.random()*10); } //打印隨機生成的元素 for(int i=0; i<10; i++){ System.out.print(arr[i]+" "); } System.out.println();//換行 System.out.println("移動後的元素:"); int temp = arr[0];//保存第一個數 for(int j=0; j<arr.length-1; j++){ arr[j] = arr[j+1];//把後一個數賦值給前一個 } arr[arr.length-1] = temp;//把第一個數賦值給最後一個 //打印移動後的元素 for(int i=0; i<10; i++){ System.out.print(arr[i]+" "); } } /* 運行結果: 如下是十個隨機數! 8 3 1 2 7 3 6 4 1 3 移動後的元素: 3 1 2 7 3 6 4 1 3 8 */ /*******************************************/ /* * 將一個數組中的數據倒過來排, * 例如:1 2 3 4 5 6 倒過來 6 5 4 3 2 1 */ public void test18(){ int[] arr = new int[10]; int[] newArr = new int[10]; System.out.println("如下是十個隨機數!"); for(int i=0; i<10; i++){ //隨機生成十個數 介於0到10 arr[i] = (int)(Math.random()*10); } //打印隨機生成的元素 for(int i=0; i<10; i++){ System.out.print(arr[i]+" "); } //將生成數組的元素的最後一個賦值給第一個,倒數第二個給第二個,以此類推 for(int i=9; i>=0; i--){ newArr[9-i] = arr[i]; } System.out.println();//換行 for(int i=0; i<10; i++){ System.out.print(newArr[i]+" "); } } /* 打印結果: * 如下是十個隨機數! 5 0 8 4 2 1 3 5 7 6 6 7 5 3 1 2 4 8 0 5 */ /*************************************************/ /* * 定義一個int數組a,包含100個元素,保存100個隨機的4位數 * 再定義一個int數組b,包含十個元素,統計a數組中的元素對10 * 求餘等於0的個數,保存到b[0]中,餘數等於1保存到吧[1]中,以此類推 */ public void test19(){ int[] a = new int[100]; int[] b = new int[10]; System.out.println("如下是100個隨機數!"); for(int i=0; i<a.length; i++){ //隨機生成十個數 介於0到10 a[i] = (int)(Math.random()*9000+1000);//1000~10000 } int sum = 0; for(int i=0; i<b.length; i++){ for(int j=0; j<a.length; j++){ if(a[j]%10==i){ sum++; } } b[i] = sum; sum=0;//取餘完全部i以後將sum=0,從新計算 System.out.print("b["+i+"]"+"="+b[i]+" "); } } // 運行結果 :b[0]=11 b[1]=6 b[2]=12 b[3]=14 b[4]=6 b[5]=10 b[6]=9 b[7]=10 b[8]=10 b[9]=12 /****************************************************************/ /** * 打印一個○ */ public void test20(){ for(int i=0; i<30; i++){ for(int j=0; j<30; j++){ //半徑爲5 圓公式 x^2+y^2 = r^2 if(((i-10)*(i-10)+(j-10)*(j-10))==25){ System.out.print(" * "); }else{ System.out.print(" "); System.out.print(" "); } } System.out.println(); } } /*運行結果 * * * * * * * * * * * * */ public static void main(String[] args) { Test11_20 t = new Test11_20(); t.test20(); } }
若有不足,多多指教。java