《Java语言程序设计与数据结构》编程练习答案(第七章)(三)

《Java语言程序设计与数据结构》编程练习答案(第七章)(三)

英文名: Introduction to Java Programming and Data Structures, Comprehensive Version, 11th Edition

7.27

import java.util.Scanner;
import java.util.Arrays;
public class book {
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter list1 size and contents: ");
        int s1 = input.nextInt();
        int[] l1 = new int[s1];
        for(int i=0;i<s1;i++)
            l1[i]=input.nextInt();
        System.out.print("Enter list2 size and contents: ");
        int s2 = input.nextInt();
        int[] l2 = new int[s2];
        for(int i=0;i<s2;i++)
            l2[i]=input.nextInt();
        Arrays.sort(l1);
        Arrays.sort(l2);
        if(equals(l1,l2))
            System.out.println("Two lists are identical");
        else
            System.out.println("Two lists are not identical");
    }
    public static boolean equals(int[] list1,int[] list2)
    {
        int l1 = list1.length;
        int l2 = list2.length;
        if(l1!=l2)
            return false;
        else
        {
            for(int i=0;i<l1;i++)
            {
                if(list1[i]!=list2[i])
                    return false;
            }
            return true;
        }
    }
}

7.28

这个以前有

7.29

public class book {
    public static void main(String[] args)
    {
        int count = 0;
        while(true)
        {
            int card1 = (int)(Math.random()*52);
            int card2 = (int)(Math.random()*52);
            while(card2==card1)
                card2=(int)(Math.random()*52);
            int card3 = (int)(Math.random()*52);
            while(card3==card1||card3==card2)
                card3=(int)(Math.random()*52);
            int card4 = (int)(Math.random()*52);
            while(card4==card3||card4==card2||card4==card1)
                card4=(int)(Math.random()*52);
            count++;
            if(card1%13+card2%13+card3%13+card4%13+4==24)
                break;
        }
        System.out.print("There are "+count+" times.\n");
    }
}

7.30

import java.util.Scanner;
public class book {
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.out.print("Enter thr number of values: ");
        int num = input.nextInt();
        System.out.print("Enter the values: ");
        int[] s = new int[num];
        for(int i=0;i<num;i++)
            s[i]=input.nextInt();
        if(isConsecutiveFour(s))
            System.out.println("The list has consecutive fours");
        else
            System.out.println("The list has no consecutive fours");
    }
    public static boolean isConsecutiveFour(int[] values)
    {
        boolean ass=false;
        int base=values[0];
        int count=1;
        for(int i=1;i<values.length;i++)
        {
            if(values[i]==base)
                count++;
            else
            {
                base=values[i];
                count=1;
            }
            if(count==4)
            {
                ass=true;
                break;
            }
        }
        return ass;
    }
}

7.31

import java.util.Scanner;
public class book {
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.out.print("Enter list1 size and contents: ");
        int num1 = input.nextInt();
        int[] l1  =new int[num1];
        for(int i=0;i<num1;i++)
            l1[i]=input.nextInt();
        System.out.print("Enter list2 size and contents: ");
        int num2 = input.nextInt();
        int[] l2  =new int[num2];
        for(int i=0;i<num2;i++)
            l2[i]=input.nextInt();
       int[] ass=merge(l1,l2);
       System.out.print("list 1 is ");
       for(int i=0;i<num1;i++)
           System.out.print(l1[i]+" ");
       System.out.print('\n');
       System.out.print("list 2 is ");
       for(int i=0;i<num2;i++)
           System.out.print(l2[i]+" ");
       System.out.print('\n');
       System.out.print("The merged list is ");
       for(int i=0;i<num1+num2;i++)
           System.out.print(ass[i]+" ");
       System.out.print('\n');
    }
    public static int[] merge(int[] list1,int[] list2)
    {
        int l1=list1.length;
        int l2=list2.length;
        int l=l1+l2;
        int[] ass = new int[l];
        int count=0;
        int ptr1 = 0;
        int ptr2 = 0;
        while(ptr1<l1&&ptr2<l2)
        {
            if(list1[ptr1]<list2[ptr2]) {
                ass[count] = list1[ptr1];
                count++;
                ptr1++;
            }
            else{
                ass[count]=list2[ptr2];
                count++;
                ptr2++;
            }
        }
        if(ptr1<l1-1)
        {
            for(int i=count;i<=l1+l2-1;i++)
            {
                ass[i]=list1[ptr1];
                ptr1++;
            }
        }
        else if(ptr2<l2-1)
        {
            for(int i=count;i<=l1+l2-1;i++)
            {
                ass[i]=list2[ptr2];
                ptr2++;
            }
        }
        return ass;
    }
}

7.32

import java.util.Scanner;
public class book {
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.out.print("Enter list1 size: ");
        int num1 = input.nextInt();
        System.out.print("Enter list contents: ");
        int[] l1  =new int[num1];
        for(int i=0;i<num1;i++)
            l1[i]=input.nextInt();
        partition(l1);
        System.out.print("After the partition, the list is ");
        for(int i=0;i<num1;i++)
            System.out.print(l1[i]+" ");
        System.out.print('\n');
    }
    public static int partition(int[] list)
    {
        int len = list.length;
        int[] help = new int[2*len];
        int pivot = list[0];
        help[len+1]=list[0];
        int ptr1 = len;
        int ptr2 = len+2;
        for(int i=1;i<len;i++)
        {
            if(list[i]>pivot)
            {
                help[ptr2]=list[i];
                ptr2++;
            }
            else
            {
                help[ptr1]=list[i];
                ptr1--;
            }
        }
        for(int i=0;i<len;i++)
            list[i]=help[ptr1+1+i];
        return len-ptr1;
    }
}

7.33

过于简单,

👨🐰🌶

7.34

import java.util.Scanner;
import java.util.Arrays;
public class book {
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.out.print("Enter a string: ");
        String test = input.next();
        System.out.println(sort(test));
    }
    public static String sort(String s)
    {
        int len = s.length();
        char[] ass = new char[len];
        for(int i=0;i<len;i++)
            ass[i]=s.charAt(i);
        Arrays.sort(ass);
        String dick = "";
        for(int i=0;i<len;i++)
            dick+=ass[i];
        return dick;
    }
}

7.35

import java.util.Scanner;
import java.util.Arrays;
public class book {
    public static void main(String[] args)
    {
        String[] words = {"program","is","fun","while","damnhard","swyswyswy"};
        play(words);
    }
    public static void play(String[] words)
    {
        Scanner input = new Scanner(System.in);
        char cont = 'y';
        while(cont=='y')
        {
            playARound(words);
            System.out.print("Do you want to guess another word?Enter y or n>: ");
            cont=input.next().charAt(0);
            while(cont!='y'&&cont!='n')
            {
                System.out.print("Do you want to guess another word?Enter y or n>: ");
                cont=input.next().charAt(0);
            }
        }
    }
    public static void playARound(String[] words)
    {
        Scanner input = new Scanner(System.in);
        String word = words[(int)(Math.random()*words.length)];
        int len = word.length();
        char[] letters = new char[len];
        for(int i=0;i<len;i++)
            letters[i]='0';
        int lettersPointer = 0;
        int missCount = 0;
        int notGuessed = len;
        while(notGuessed>0)
        {
            System.out.print("(Guess) Enter a letter in word "+alter(word,letters)+" > ");
            char guessLetter = input.next().charAt(0);
            if(belongs(guessLetter,letters))
                System.out.println(guessLetter+" is already in the word");
            else if(!belongs(guessLetter,word))
            {
                System.out.println(guessLetter+" is not in the word");
                missCount++;
            }
            else
            {
                letters[lettersPointer]=guessLetter;
                lettersPointer++;
                notGuessed-=occurTime(guessLetter,word);
            }
        }
        System.out.println("The word is "+word+". You missed "+missCount+" time(s)");
    }
    public static String alter(String word,char[] letters)
    {
        String re = "";
        int len = word.length();
        for(int i=0;i<len;i++)
        {
            if(belongs(word.charAt(i),letters))
                re+=word.charAt(i);
            else
                re+='*';
        }
        return re;
    }
    public static boolean belongs(char key,char[] letters)
    {
        for (char letter : letters) {
            if (letter == key)
                return true;
        }
        return false;
    }
    public static boolean belongs(char key,String word)
    {
        for(int i=0;i<word.length();i++)
        {
            if(key==word.charAt(i))
                return true;
        }
        return false;
    }
    public static int occurTime(char key,String word)
    {
        int count=0;
        for(int i=0;i<word.length();i++) {
            if (key == word.charAt(i))
                count++;
        }
        return count;
    }
}

7.36

public class book {
    public static void main(String[] args)
    {
        int[] queens = {0,1,2,3,4,5,6,7};
        while(conflict(queens))
            shake(queens);
        for(int i=0;i<8;i++)
        {
            for(int j=0;j<queens[i];j++)
                System.out.print("| ");
            System.out.print("|Q");
            for(int j=queens[i]+1;j<8;j++)
                System.out.print("| ");
            System.out.println("|");
        }
    }
    public static void shake(int[] dick)
    {
        int len = dick.length;
        for(int i=0;i<len;i++)
        {
            int dst = (int)(Math.random()*len);
            int tmp = dick[i];
            dick[i]=dick[dst];
            dick[dst]=tmp;
        }
    }
    public static boolean conflict(int[] queens)
    {
        int[] plus = new int[8];
        int[] minus = new int[8];
        for(int i=0;i<8;i++)
        {
            plus[i]=i+queens[i];
            minus[i]=i-queens[i];
        }
        for(int i=0;i<8;i++)
        {
            if(occurTime(plus[i],plus)>1)
                return true;
        }
        for(int i=0;i<8;i++)
        {
            if(occurTime(minus[i],minus)>1)
                return true;
        }
        return false;
    }
    public static int occurTime(int key, int[] set)
    {
        int count=0;
        for (int value : set) {
            if (key == value)
                count++;
        }
        return count;
    }
}

7.37

import java.util.Scanner;
import java.util.Arrays;
public class book {
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number of balls to drop: ");
        int balls = input.nextInt();
        System.out.print("Enter the number of slots in the bean machine: ");
        int numSlot = input.nextInt();
        int[] slots = new int[numSlot];
        for(int i=0;i<balls;i++)
            drop(numSlot,slots);
        for(int i=max(slots);i>=1;i--)
        {
            for(int j=0;j<numSlot;j++)
            {
                if(slots[j]<i)
                    System.out.print(" ");
                else
                    System.out.print("0");
            }
            System.out.print('\n');
        }
    }
    public static void drop(int numSlot,int[] slots)
    {
        double bias = 0;
        for(int i=0;i<numSlot-1;i++)
        {
            if(Math.random()>0.5)
            {
                bias+=0.5;
                System.out.print('R');
            }
            else
            {
                bias-=0.5;
                System.out.print('L');
            }
        }
        System.out.print('\n');
        if(numSlot%2==1)
            slots[(int)(numSlot/2+bias)]++;
        else
        {
            if(bias>0)
                slots[(int)(numSlot/2-0.5+bias)]++;
            else
                slots[(int)(numSlot/2+bias)]++;
        }
    }
    public static int max(int[] ass)
    {
        int max = ass[0];
        for (int value : ass) {
            if (value > max)
                max = value;
        }
        return max;
    }
}

第七章 完

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值