Java练习题(方法)
題目
- 猴子大王:
- 代碼
- 問題總結:
- 數字密碼:
- 代碼
- 問題總結:
猴子大王:
求猴子大王
15個猴子圍成一圈選大王,依次1-7循環報數,報到7的猴子被淘汰,直到最后一只猴子稱為大王,問:哪只猴子會成為大王?
代碼
解法一:
package com.company.day11;/* Author: date: problem:7、求猴子大王 15個猴子圍成一圈選大王,依次1-7循環報數,報到7的猴子被淘汰,直到最后一只猴子稱為大王,問:哪只猴子會成為大王?問題:你沒有辦法跳回到索引值為1的數組1.定義一個長度為15的數組,for循環遍歷數組把1-15賦值 2定義一個計數器(判斷是不是等于7),一個操作數(等于7的有幾個,操作了幾次) 3.if判斷計數器count為7就賦值0給對應的數組。 4.把元素值為0的數組刪除,即if判斷不為0的元素,把不為0的元素放到一個新的數組中 5.返回新的數組的地址 6.用一個變量接收數組的值,輸出 */ public class monkeyprime { //下標代表每只猴子static int[] monkey1 = new int[15];public static void main(String[] args) {//循環數組把值賦值給數組for (int i = 0; i < monkey1.length; i++) {monkey1[i] = i;}monkey(monkey1);//把返回的值賦給monkey2int[] monkey2=monkey(monkey1);System.out.println("大王是"+monkey2[0]);}public static int[] monkey(int[] monkey1) {//判斷等于7的猴子,等于7那么就把0賦值給他int count = 0;//計數器while (monkey1.length != 1) {int c = 0;//淘汰次數for (int i = 0; i < monkey1.length; i++) {count++;if (count == 7) {monkey1[i] = 0;count = 0;c++;}}//改變數組長度,把等于0的元素除去/*1.定義一個新的數組,接收不為0的元素。*/int monkeyarr1[] = new int[monkey1.length - c];int index = 0;for (int i = 0; i < monkey1.length; i++) {if (monkey1[i] != 0) {monkeyarr1[index++] = monkey1[i];}}//把數組的地址給monkey1monkey1 = monkeyarr1;}return monkey1;} }解法二:
package com.company.day12;;public class monkeykinggame {public static void main(String[] args) {boolean monkey[]=new boolean[15]; //用布爾類型代表生死//遍歷數組,把每只猴子定義為的for (int i = 0; i <monkey.length ; i++) {monkey[i]=true; //定義為true(活的)}//定義一個變量,用于表示猴子的活個數,作為循環的終止判斷條件int liveNumber=15;//定義一個數組下標索引變量,用于找到每只猴子int index=0;/*while (liveNumber>1){for (int i = 1; i < 8;) {if(monkey[index]){if(i==7){monkey[index]=false;liveNumber--;}i++;//只有沒有被淘汰的猴子才有資格報數}index++;if(index==15){index=0;}}}*///報數計數器int baoShu = 0;while (liveNumber > 1) {//猴子為活的,進入報數if (monkey[index]) {baoShu++;if (baoShu==7) {monkey[index] = false;liveNumber--;baoShu = 0;}}index++;if (index == 15) {index = 0;}}//輸出活得猴子個數:for (int i = 1; i <monkey.length ; i++) {if(monkey[i]){System.out.println("第"+(i+1)+"只");}}} }問題總結:
比較:
1.解法一:最開始我想到的是解法一,思路大概是把猴子全部用裝到數組里去,并且打上標記。開始報數,當報到7時,把猴子標記為0(死猴子)。重置報數count變量,并且定義一個操作數c,用來記錄淘汰了多少只猴子。之后把不為0的猴子放到一個新的數組。一直循環直到長度為0;
解法二:用Boolean類型定義猴子的死活,定義一個報數變量baoshu,定義猴子個數。當猴子為活觸發,一直累加,報數為7,淘汰一只猴子,一直循環,找到最后那只猴子。
2.解法二比解法一簡單,可我最開始看到這個題目時,最先考慮到的是,到7時,要改變數組的長度。這樣一直循環下去找到,最后只剩下一只。解法一我也學到當只有兩種結果時,不一定只考慮int等我們常用的,也可用布爾類型的數據類型
數字密碼:
數字資產的概念被提出來,用于給數字資產加密的業務變得非常火熱,現有一套用于給數字資產加密的系統專門用于產生加密密碼,請設計一個方法用于給數字密碼進行加密
加密規則如下:根據數字長度的每位數,給每位數+5,再對10求余,最后將所有數字反轉,得到的新數,如果是奇數請加上1997,否則就是這個新數。
代碼
解法一:
package com.company.day11;/* Author: date: problem: 數字資產的概念被提出來,用于給數字資產加密的業務變得非常火熱,現有一套用于給數字資產加密的系統專門用于產生加密密碼 請設計一個方法用于給數字密碼進行加密 加密規則如下:根據數字長度的每位數,給每位數+5,再對10求余,最后將所有數字反轉,得到的新數. 如果是奇數請加上1997,否則就是這個新數。 1.不知道密碼,需要自己傳入數字密碼,在main方法中寫一個scanner,作為實參傳入security方法中 2.傳入的實參用length獲取長度,循環遍歷length次,對每一個數+5取10.然后把逆序輸出,然后在判斷是不是偶數。是的話,就輸出整個數第二種方法: 1.獲取到這個數字的長度,不斷除以10.當為0的時候結束循環,定義一個計數器,計數除以10的次數注意:*/import java.util.Scanner;public class securitycode {public static void main(String[] args) {System.out.println("請輸入密碼");Scanner sca = new Scanner(System.in); // String code = sca.nextLine();int code1 = sca.nextInt(); // secritcode(code);}public static void secritcode(String code) {int sum = 0;int[] arr = new int[code.length()]; // System.out.println(number); // int n1 = Integer.valueOf(code);//把字符串轉換為數字for (int i = 0; i < code.length(); i++) {//把純字符的數字轉換為單個字符char n1 = code.charAt(i);int n2 = n1 - '0';//把單個字符轉為int型的數字 // int n2=Integer.parseInt(n1); // System.out.println(n2);int n3 = (n2 + 5) % 10;//把得到的數字進行變換arr[i] = n3;//把值全部放入到定義的數組中System.out.print(arr[i]);//順序輸出的數組}//把數組中的值逆序輸出:System.out.println();for (int j = arr.length - 1; j >= 0; j--) {System.out.print(arr[j]);}//數字轉換為字符 // String n4= Arrays.toString(arr); // int n5 = Integer.valueOf(n4); // System.out.print(n5); // System.out.println(); // int shuzi1=0;//這是把數組的值一個一個輸出,現在就是要把數組中的數字變成數組相加for (int j = arr.length - 1; j >= 0; j--) { // //把數組中的數轉換為字符sum = sum * 10 + arr[j];// String zifu=arr[j]+""; // // System.out.println("字符為"+zifu); // //把字符串轉換為數字 // int shuzi = Integer.valueOf(zifu); // shuzi1=shuzi; // System.out.print("數字為"+shuzi1); //}System.out.println("數字為" + sum);//判斷是不是偶數if (sum % 2 == 0) {System.out.println("新數為" + sum);} else {sum = sum + 1997;System.out.println("新數為" + sum);}}}解法二:
package com.company.day12;/* Author: date: problem:請設計一個方法用于給數字密碼進行加密 加密規則如下:根據數字長度的每位數,給每位數+5,再對10求余,最后將所有數字反轉,得到的新數. 如果是奇數請加上1997,否則就是這個新數。 1.求出數字的長度,然后for循環,不斷模10,取出每一位數。把他放到一個數組中。 2.逆序輸出,,然后把數組中的值放到*10相加,得到一個新數,之后在判斷是不是奇數偶數*/import java.util.Scanner; public class securitycode2 {public static void main(String[] args) {securitycode22();}public static void securitycode22(){System.out.println("請輸入數字");Scanner sca=new Scanner(System.in);int scanner=sca.nextInt();int count=0;//計數器,用來計數//求出數字的長度int scanner1=scanner;while(scanner>0){scanner=scanner/10;count++;}System.out.println("一共有"+count+"位");//把每位數求出來,運算int[] arr1=new int[count];//用來裝每位數int[] arr2=new int[count];//用來存已經運算之后的數for(int i=0;i<count;i++){int scanner3=scanner1%10;scanner1=scanner1/10;arr1[i]=scanner3;arr2[i]=(arr1[i]+5)%10;//對得到的數組運算}//輸出運算之后的數for(int i=0;i<count;i++){System.out.print(arr2[i]);}//逆序輸出,整合成一個新的數。int[] arr3=new int[count];int index=0;for(int i=count;i>0;i--){arr3[index++]=arr2[i];}int sum=0;for (int i = 0; i <count ; i++) {sum=sum*10+arr3[i];}//判斷是不是偶數,奇數請加上1997,否則就是這個新數。if(sum%2!=0){sum=sum+1997;System.out.println(sum);}else{System.out.println(sum);}} }問題總結:
1.求數字或字符串的長度:
可以把數字轉為字符串,調用length方法。也可以定義一個計數器,不斷除以10.直到while循環為flase.
總結
以上是生活随笔為你收集整理的Java练习题(方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python算法与程序设计基础(第二版)
- 下一篇: java美元兑换,(Java实现) 美元