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