欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第五章题总结

程序员文章站 2024-03-02 12:35:34
...

5.1
第五章题总结
answer1: 利用数据扩容来做哦

import java.util.*;
class test511{
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        //定义一个空数组
        int [] arr=new int[0];
        //用户请输入数据
        System.out.print("用户请输入数据 ");
        //将数据放到扩容后的新数组中
        while(true){
           int num=scanner.nextInt();
           if(num==0){
               break;
           }
           //验证用户输入数据的正确性
           if(num<1||num>100){
               System.out.print("数据非法 ");
               return;
           }
           arr=copyOf(arr,arr.length+1);
           arr[arr.length-1]=num;
        }
        //按照输出结果,将数据中的数据进行排序
       insertSort(arr);
        //输出连续相等的数字   
        show(insertSort(arr));
    }
    public static int [] copyOf(int [] arr,int len){
        int [] newArr=new int [len];
        for(int i=0;i<arr.length;i++){
              newArr[i]=arr[i];
        }
        return newArr;
    }
    public static int []   insertSort(int [] arr){
        for(int i =1;i<arr.length;i++){
            int e=arr[i];
            int j;
            for( j=i;j>0&&arr[j-1]>e;j--){
             arr[j]=arr[j-1];
            }
            arr[j]=e;
        }
        return arr;
    }
    public static void show(int [] arr){
       // System.out.print(Arrays.toString(arr));
        for(int i=0;i<arr.length;){
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    count++;
                }
                else{
                    break;
                }
            }
            System.out.println(arr[i]+"occurs"+count+ (count>1?"times":"time"));
            i+=count;
        }
    }
}

answer2:利用计数原理做哦

import java.util.*;
class test511_02{
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        //定义一个空数组
        int [] arr=new int[101];
        //用户请输入数据
        System.out.print("用户请输入数据 ");
        while(true){
           int num=scanner.nextInt();
           if(num==0){
               break;
           }
           arr[num]++;
       }
    for(int i=0;i<arr.length;i++){
        if(arr[i]!=0){
            System.out.println(i+"occurs"+arr[i]+ (arr[i]>1?"times":"time"));
        }
    }
    
}
}

5.2
第五章题总结
这道题有三种解法
anwer1:新建一个数组来做,不过这样做比较占用空间

import java.util.*;
class test52_01{
    public static void main(String[] args){
      Scanner scanner =new Scanner(System.in);
      //循环遍历数组并且进行赋值
      int [] arr=new int[10];//空间是S(n) 时间是O(n^2)
      System.out.print("请输入数据 ");
      int num;
      for(int i=0;i<arr.length;i++){
        num=scanner.nextInt();
        arr[i]=num;
      }
      //创建一个新数组,如果这个新数组和arr数组进行比较,如果newArr
      //不包含arr中的数据,然后将arr数据放到newArr中
       System.out.print(method(arr));
    }
    public static int [] method(int [] arr){
        int [] newArr=new int [0];
        for(int i=0;i<arr.length;i++){
            if(!isContains(newArr,arr[i])){
                newArr=copyOf(newArr);
                newArr[newArr.length-1]=arr[i];
            }
        }
           return newArr;
    }
    public static boolean isContains(int [] arr,int key){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                return true;
            }
        }
        return false;
    }
    public static int [] copyOf(int [] newArr){
        int [] newArr1=new int [newArr.length+1];
        for(int i=0;i<newArr.length;i++){
             newArr1[i]=newArr[i];
        }
        return newArr1;
    }
}

answer2:利用数组数据连续相等的原理来做

/*
利用数据连续相等的原理
*/
import  java.util.*;
class test52_02{
    public static void main(String []  args){
       System.out.print("请输入数据 ");
       Scanner scanner =new Scanner(System.in);
       //创建一个数据  空间是S(1)
       int [] arr=new int [10];
       for(int i=0;i<arr.length;i++){
           arr[i]=scanner.nextInt();
       } 
      // System.out.print(Arrays.toString(arr));
       method(arr);
    }
    public static void method(int [] arr){
        //利用连续相等的原理
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]);
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]==arr[i]){
                    count++;
                }
                else{
                    break;
                }
            }
            i+=count;
        }
    }
}

answer3:这种解法就是当发现有相等的数,就把后面的数往前移,相当于覆盖

import java.util.*;
class test52_03{
    public static void main(String[] args){
        //如果两数不相等,就将后面的数字往前移
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入十个数字 ");
        int [] arr =new int[10];
        for(int i=0;i<arr.length;i++){
              arr[i]=scanner.nextInt();
        }
        method3(arr);
    }
    public static void method3(int [] arr){
             int i=0;
             int size=arr.length;
             while(i<size){
                 for(int j=i+1;j<size;j++){
                     if(arr[j]==arr[i]){
                     for(int k=j+1;k<size;k++){
                         arr[k-1]=arr[k];
                     }
                     size--;
                     }
                     else{
                        j++;
                     }   
                 }
                 i++;
             }
             for( i=0;i<size;i++){
               System.out.print(arr[i]+" ");
             }
    }
}

5.3遍历数组,通过比较数组中个的每个元素来判断元素是否排好序
第五章题总结

import java.util.*;
class test53{
    public static void main(String[] args){
        //获取数组的长度并对数组进行遍历
        Scanner scanner =new Scanner(System.in);
        System.out.print("输入数组的长度 ");
        int len =scanner.nextInt();
        //新建数组
        int [] arr=new int[len];
        //遍历数组并且赋值
        System.out.print("输入数组的数据 ");
        for(int i=0;i<arr.length;i++){
            arr[i]=scanner.nextInt();
        }
        //对数组进行有序的判断
        if(isSort(arr)){
            System.out.print("数组已经排好序了 ");
        }
        else{
            System.out.print("数组没有排好序 ");
        }
       
        }
        public static boolean isSort(int [] list){
            for(int i=1;i<list.length;i++){
                if(list[i-1]!=list[i]){
                    return false;
                }
            }
            return true;
    }
}


5.4数组在现实中的应用
第五章题总结
第五章题总结
看代码哦

/*
输入数据:球的个数=路径的个数 槽子的个数
创建槽子个数的容器int []  arr
对于每一个小球的下落的路径是字符L或者R
对于每一个小球而言其路径中的步骤是随机产生R和L
1,提示用户输入球的个数和槽子的个数
2,根据已有的槽子的个数区创建槽子容器
3,根据已有的球的个数和槽子的个数区随机创建一个小球下落的路径
4,路径中经过几个钉子?路径的步骤有几步和槽子的个数有关
5,如何通过路径的经过得知最终落入的槽子?
*/
import java.util.*;
class test54{
    public static void main(String [] args){
     Scanner scanner=new Scanner(System.in);
     System.out.print("Enter the number of balls to drop ");
     int balls=scanner.nextInt();
     System.out.print("Enter the number of slots in the bean machine ");
     int slots=scanner.nextInt();
     //创建槽子个数的容器int []  arr
     int [] arr=new int[slots];
     //每一个球对应一种路径
     for(int i=0;i<balls;i++){
         String path=getPath(slots);
         //打印这些球的路径
         System.out.println(path);
         //打印槽子底部球落入的个数 主要是看R的个数
         //一个R代表1号槽,同理其他一样
         arr[getR(path)]++;
     }
     //输出arr槽子的情况
     System.out.println(Arrays.toString(arr));
     show(arr);
    }
    public static void show(int  [] arr){
        int w=arr.length;
        int h=0;
        for(int i=0;i<arr.length;i++){
            //求出高的最大值
            if(h<arr[i]){
                h=arr[i];
            }
        }
        for(int i=h-1;i>=0;i--){
            for(int j=0;j<w;j++){
                if(i<arr[j]){
                    System.out.print("O");
                }
                else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

    public static String getPath(int slots){
        Random random =new Random();
        String path=" ";
        //根据槽子的个数计算每个数下落的路径
        //对于每一个小球而言,碰到每一个钉子都有两种路径R和L
         //钉子的个数是slots-1
        for(int j=0;j<slots-1;j++){
            //产生一个随机路径R或者L
            if(random.nextInt(2)==0){
                path+="L";//向左
            }
            else {
                path+="R";//向右
            }
        }
        return path;
    }
    public static int getR(String path){
        int count=0;
        for(int i=0;i<path.length();i++){
            if(path.charAt(i)=='R'){
                count++;
            }
        }
        return count;
    }
}

5.5
先判断长度是否相等,再判断两个数组中的元素是否相等
第五章题总结

/*
判断两个数组是否相等
*/
import java.util.*;
class test55{
    public static void main(String[] args){
     Scanner scanner =new Scanner(System.in);
     System.out.print("输入list1的个数 ");
     int len1=scanner.nextInt();
     int [] list1=new int [len1];
     System.out.print("输入list1的数据 ");
     for(int i=0;i<list1.length;i++){
         list1[i]=scanner.nextInt();
     }
     System.out.print("输入list2的个数 ");
     int len2=scanner.nextInt();
     int [] list2=new int [len1];
     System.out.print("输入list2的数据 ");
     for(int i=0;i<list2.length;i++){
         list1[i]=scanner.nextInt();
     }
   
    }
    public static boolean equals(int [] list1,int [] list2){
        //判断数组长度是否相等
        if(list1.length!=list2.length){
            return false;
        }
        //在判断元素的大小
        for(int i=0;i<list1.length;i++){
            if(list1[i]!=list2[i]){
              return false;
            }
        }
        return true;
    }

}

5.6利用数组相等原理做的,看代码~!
第五章题总结

import java.util.*;
class test56{
    public static void main(String[] args){
    Scanner scanner =new Scanner(System.in);
     System.out.print("输入arr的个数 ");
     int len=scanner.nextInt();
     int [] arr=new int [len];
     System.out.print("输入arr的数据 ");
     for(int i=0;i<arr.length;i++){
         arr[i]=scanner.nextInt();
     }
    }
    public static void method(int [] arr){
        for(int i=0;i<arr.length;i++){
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    count++;
                }
                else{
                    break;
                }
            }
            if(count>=4){
                System.out.print(arr[i]);
                break;
            }
            i+=count;
        }
        System.out.print("没有 !");

    }
}

5.7先判断两个是否为空
不为空的话,两数组进行比较,把较小的元素,一次放到第三个数组中
第五章题总结

import java.util.*;
class test57{
    public static void main(String [] args){
        Scanner scanner =new Scanner(System.in);
        System.out.print("输入list1的个数 ");
        int len1=scanner.nextInt();
        int [] list1=new int [len1];
        System.out.print("输入list1的数据 ");
        for(int i=0;i<list1.length;i++){
            list1[i]=scanner.nextInt();
        }
        System.out.print("输入list2的个数 ");
        int len2=scanner.nextInt();
        int [] list2=new int [len2];
        System.out.print("输入list1的数据 ");
        for(int i=0;i<list2.length;i++){
            list2[i]=scanner.nextInt();
        }
         System.out.print(Arrays.toString( merge(list1, list2)));
    }
    public static int[] merge(int [] list1,int [] list2){
        if(list1==null&&list2==null){
            return null;
        }
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        //如果两者都不为空
        int[] list3=new int[list1.length+list2.length];
        int p1=0;
        int p2=0;
        int p3=0;
        while(true){
            if(p1==list1.length&&p2==list2.length){  //说明p1和p2都已经走完了
                 break;
        }
        if(p1==list1.length&&p2<list2.length){
            list3[p3++]=list2[p2++];
        }
        else if(p1<list1.length&&p2==list2.length){
            list3[p3++]=list1[p1++];
        }
        else{
            if(list1[p1]<list2[p2]){
                list3[p3++]=list1[p1++];
            }
            else{
                list3[p3++]=list1[p2++]; 
            }
        }
    }
    return list3;
    }
}

5.8
数组在现实中的应用
第五章题总结

/*
数据 一组单词的明文 一组单词的密文 单词的状态
******
p***** 输入p时显示p
*/
import java.util.*;
class test58{
public static void main(String[] args){
    Scanner scanner =new Scanner(System.in);
    Random random=new Random();
    //1创建一个单词表
    String [] words={"rerer","sttfdg","java","gddfg","program"};
    //2随机从单词表中抽取一个单词
    while(true){
    String word=words[random.nextInt(words.length)];
    //3创建一个该单词默认值(false)密文
    boolean [] status=new boolean[word.length()];
     int miss=0;//猜错的个数
     while(true){
     //4开始第一个单词
     //5根据单词和密文表,决定密文的形式
     String ciphertext=getCipherText(word,status);
     //6输出密文并提示用户输入字母
     System.out.print("Enter a letter in word"+ciphertext+">");
      char letter =scanner.nextLine().charAt(0);
      //判断单词中是否有字母
      if(isContainsLetter(word,letter)){
          //单词有的话是分两种情况,已经修改和未修改
          if(!changeWordStatus(word, status, letter)){
              //如果为true说明是已经修改了
              //如果是false说明没有修改
             System.out.print(letter+"is already in word ");
          }
      }
     else {
        System.out.print(letter+"is  not in word ");
        miss++;
     }
         //是否结束
         if(isFinished(status)){
           System.out.print("The word is"+word +"you miss"+miss+"times");
             break;
        }
        }
         System.out.print("Do you want to guess annother word?Enter n or y");
         String choice =scanner.nextLine();
         if(choice.equals("n")){
          System.out.print("welcome!Thank you ");
              break;
         }
        }
       }
public static boolean isFinished(boolean[] status){
            for(int i=0;i<status.length;i++){
                if(!status[i]){
                    return false;
                }
            }
            return true;
}
public static boolean   changeWordStatus(String word,boolean[] status,char letter){
           for(int i=0;i<word.length();i++){
               if(letter==word.charAt(i)){
                   if(status[i]){ //表示已经修改了
                       return false;
                   }
                   else{
                       status[i]=true;
                   }
               }
           }
           return true;
}
public static boolean isContainsLetter(String word,char letter){
                  for(int i=0;i<word.length();i++){
                      if(word.charAt(i)==letter){
                          return true;
                      }
                  }
                  return false;
}
public static String getCipherText(String word,boolean[] status){
       String ciphertext=" ";
       for(int i=0;i<status.length;i++){
           if(status[i]){
               ciphertext+=word.charAt(i);
           }
           else{
            ciphertext+="*";
           }
       }
       return ciphertext;
}
}

未完待续!!!!!!!

相关标签: java