Java第一次代碼做業彙總

練習題1:(完數問題)java

    求100之內的全部完數。(完數:它全部因子之和等於其自己)git

 

 方法一:數組

 1 /*
 2 解體思路:1.先找出每一個數的全部因子  3  2.比較因子之和是否與其數自己相等  4  */
 5 
 6 public class wanshu {  7     public static void main(String[] args) {  8         int sum=0;  9         for(int i=1;i<=1000;i++)      //外層for循環用於遍歷1-1000的全部數
10  { 11             for(int j=1;j<i;j++)     //內層for循環用於遍歷查找每一個數的全部因子
12             {                           //注意:j 從1開始,由於分母不能爲0!!!
13                 if(i%j==0)            //若是A能夠將B整除,餘數爲0,則B 爲A 的因子
14  { 15                     sum+=j;           //計算出全部因子之和
16  } 17             }                           // 比較因子之和是否與其自己相等
18             if(sum==i)                 //注意:「比較」要放到內層for循環外,以避免出現尚未計算完全部因子,僅當前因子數
19             {                          //之和就與其數自己相等,而誤被看成完數!!!!
20                 System.out.println(i+": "); 21                 for(int j=1;j<i;j++)     //打印完數的全部因子
22  { 23                     if(i%j==0) 24  { 25                         System.out.println(j+" "); 26  } 27  } 28  } 29  } 30  } 31 
32 }

     方法二:函數

 1      2 
 3  1  /*
 4  2 解題思路:先找出每一個數的全部因子  5  3 而後將其全部因子存儲在一個數組裏  6  4 若是該數符合完數要求,則打印出數組裏的數  7  5 若是該數不符合要求,則將數組清空,用於存放下一個數的全部因子  8  6 */
 9  7 public class wanshu { 10  8     public static void main(String[] args) { 11  9        int[] arr=new int[1000]; 12 10        int index=0; 13 11        int sum=0; 14 12        for(int i=1;i<1000;i++) 15 13 { 16 14            for(int j=1;j<i;j++) 17 15 { 18 16                if(i%j==0) 19 17 { 20 18 
21 19                    arr[index]=j; 22 20                    sum+=arr[index]; 23 21                    index++; 24 22 } 25 23 } 26 24            if(sum==i) 27 25 { 28 26                System.out.print(i+":"); 29 27              for(int j=0;j<index;j++) 30 28 { 31 29                  System.out.print(arr[j] + " "); 32 30 } 33 31 System.out.println(); 34 32 } 35 33 
36 34            index=0; 37 35            sum=0; 38 36 
39 37 } 40 38 } 41 39 
42 40 }

 練習題二:spa

      1. 統計字符串中,字母,數字及其餘字符的數量。3d

      

 
 
/*
* 解題思路:先輸入一串字符串
* 挨個遍歷,判段類型
* 定義三個變量來存儲各個類型的數量
*
*
* */


import java.util.*;
public class zifushu {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String text=in.nextLine(); //用來接收字符串
int number=0; //定義三個變量來存儲數字,字母,和其餘字符的數量
int string=0;
int other=0;
for(int i=0;i<text.length();i++) //用來遍歷整個字符串
{
char ch=text.charAt(i); //引用charAt()方法用來輸出指定位置的字符內容
if(Character.isDigit(ch)) //判斷是否爲數字
{
number++;
}else if(Character.isLetter(ch)) //判斷是否爲字母
{
string++;
}else{ //不然就爲其餘類型的字符
other++;
}
}
System.out.println("number"+number);
System.out.println("string"+string);
System.out.println("other"+other);
}
}

 

 練習題三:code

      1.用戶輸入一段字符串,格式如:gdsd    2e3d    23434  v/f#$  dffbdblog

         請輸出這段字符串中的單詞數量。字符串

       2.並將單詞打印出來。string

 

 1         /**
 2  * 解題思路:輸入數段個字符串,而後對每段字符串進行遍歷,當遇到的不是字母時,則略過此字符串,進行遍歷下一個  3  * 字符串 ,直到遇到空格前,遍歷的都是字母,則該段字符串爲單詞。  4  * 注意:最後一個由於後面沒有空格,要另行判斷  5        */
 6 import java.util.*;  7 public class zifushu {  8     public static void main(String[] args) {  9        Scanner in=new Scanner(System.in); 10         String text=in.nextLine(); 11         boolean flag=true; 12         int number=0; 13         for(int i=0;i<text.length();i++) { 14             char ch = text.charAt(i); 15             if (flag && Character.isLetter(ch)) { 16                 flag = true; 17             } else { 18                 if (ch == ' ' && flag) { 19                     number++; 20                     flag = true; 21                 } else if (ch == ' ' && (flag == false)) { 22                     flag = true; 23                 } else { 24                     flag = false; 25  } 26 
27  } 28             if(flag) 29  { 30                 number++; 31  } 32 
33  System.out.println(number); 34  } 35 
36  } 37 
38  }
 1 import java.util.*;  2 public class zifushu{  3     public static void main(String[] args) {  4         Scanner in = new Scanner(System.in);  5         String text = in.nextLine();  6         boolean flag = true;  7         int number = 0;  8         int count = 0;  9         for (int i = 0; i < text.length(); i++) { 10             char ch = text.charAt(i); 11             if (flag && Character.isLetter(ch)) { 12                 flag = true; 13                 count++; 14 
15             } else { 16                 if (ch == ' ' && flag) 17  { 18                     number++; 19                     System.out.println(text.substring(i - count, i)); 20                     count = 0; 21 
22                     // System.out.println();
23                     flag = true; 24                 } else if (ch == ' ' && (flag == false)) { 25                     flag = true; 26                 } else { 27                     flag = false; 28                     // count=0;
29  } 30 
31  } 32 
33  } 34         if (flag) { 35             number++; 36             System.out.println(text.substring(text.length() - count, text.length())); 37  } 38 
39  System.out.println(number); 40  } 41 }

 

text.substring(i - count, i)可用來打印字符串中某一截的單詞,

             i-count表明所要打印的單詞的開始位置,

             i表明所要打印單詞的末尾位置

 

練習題四: 最長路徑問題)

 

 

 

* 12
8 9
11 7 16
13 9 8 7
能夠從每一個結點 往下,往左斜下,往右斜下分別遍歷,以至找到一條從上到下的最長路徑。

 

 1 /**
 2  * 解體思路:要使從上往下挑選的路徑數值最大,那就考慮從下往遍歷,只要保證每次挑選的值最大。  3  * 由於最底層沒法繼續往下遍歷,因此首先從倒數第二層開始。  4  * 定義三個變量,存放三條路徑的值,比較後選出最大值。  5  * 因此還要定義一個與arr相同大小的數組brr,來存放各個結點能夠選擇的三天路徑中的最大值  6  *  7  *  8  */
 9 
10 public class lujing { 11     public static void main(String[] args) { 12         int[][] arr=new int[4][]; 13         arr[0]=new int[]{12}; 14         arr[1]=new int[]{8,9}; 15         arr[2]=new int[]{11,7,16}; 16         arr[3]=new int[]{13,9,8,7}; 17         int r1=0; 18         int r2=0; 19         int r3=0; 20         int[][]brr=new int[4][];        //開闢一個大小和arr相等的數組brr來存放每次條選出的最大值
21         for(int i=0;i<arr.length;i++) 22  { 23             brr[i]=new int[i+1]; 24  } 25         for(int i=0;i<arr.length;i++) 26  { 27             brr[3][i]=arr[3][i];           //由於最後一行不用計算出底下三條路徑的值,因此直接將最後一層brr賦值給arr
28  } 29 
30         for(int i=arr.length-2;i>=0;i--)     //從底下倒數第二層開始往上遍歷
31  { 32             for(int j=0;j<arr[i].length;j++) //注意此處是i-- 和j++ 33  { 34                 if(j>0) 35  { 36                     r1=arr[i][j]+brr[i+1][j-1];     //計算的是此節點和相同位置中brr數組中的值,以保證計算到最後的那個值
37                 }                                   //就是所要求的路徑中的最大值
38                 r2=arr[i][j]+brr[i+1][j]; 39                 r3=arr[i][j]+brr[i+1][j+1]; 40                 brr[i][j]=Math.max(r1,Math.max(r2,r3));    //調用Math.max()函數比較大小,
41             }                                               //注意一次只能比較兩個數
42  } 43         System.out.println(brr[0][0]); 44  } 45 }
相關文章
相關標籤/搜索