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 }
相关文章
相关标签/搜索