Java第一次代码作业汇总

练习题1:(完数问题)

    求100以内的所有完数。(完数:它所有因子之和等于其本身)

 

 方法一:

 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 }

 练习题二:

      1. 统计字符串中,字母,数字及其他字符的数量。

      


/*
* 解题思路:先输入一串字符串
* 挨个遍历,判段类型
* 定义三个变量来存储各个类型的数量
*
*
* */


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);
}
}


 练习题三:

      1.用户输入一段字符串,格式如:gdsd    2e3d    23434  v/f#$  dffbd

         请输出这段字符串中的单词数量。

       2.并将单词打印出来。

 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 }
原文地址:https://www.cnblogs.com/ljl150/p/11555964.html