zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Python语言程序设计基础(3)—— 基本数据类型
    Python语言程序设计基础(2)—— Python程序实例解析
    Python语言程序设计基础(1)—— 程序设计基本方法
    Codeforces Round #513
    Codeforces Round #514 (Div. 2)
    面试必备:Java 原子操作的实现原理[精品长文]
    最常见的Java面试题及答案汇总(一)
    Java面试题大汇总(附答案)
    Java快速排序和归并排序详解
    Java面试官最常问的volatile关键字
  • 原文地址:https://www.cnblogs.com/ljl150/p/11555964.html
Copyright © 2011-2022 走看看