Java语言程序设计与数据结构(基础篇)课后练习题 第六章(三)

6.26

package demo;

import java.util.Scanner;

public class diliuzhang {
        int count=0;
        int base=0;
        int num = 2;
        while(count<100)
        {
            if(isPrime(num)&&isPalindrome(num))
            {
                System.out.print(num+" ");
                count++;
            }
            if(count%10==0&&count!=base) {
                System.out.print('\n');
                base+=10;
            }
            num++;
        }
    }
public static boolean isPrime(int n){
        for(int i=2;i<=n/2;i++){
            if(n%i==0)
                return false;
        }
        return true;
    }
public static boolean isPalindrome(int n){
    String ass = Integer.toString(n);
    for(int i=0;i<ass.length();i++)
    {
        if(ass.charAt(i)!=ass.charAt(ass.length()-1-i))
            return false;
    }
    return true;
}
    

}

6.27

package demo;

import java.util.Scanner;

public static void main(String[] args){
        int count=0;
        int base=0;
        int num = 2;
        while(count<100)
        {
            if(isPrime(num)&&!isPalindrome(num)&&isPrime(reverse(num)))
            {
                System.out.print(num+" ");
                count++;
            }
            if(count%10==0&&count!=base) {
                System.out.print('\n');
                base+=10;
            }
            num++;
        }
    }
public static boolean isPrime(int n){
        for(int i=2;i<=n/2;i++){
            if(n%i==0)
                return false;
        }
        return true;
    }
    public static boolean isPalindrome(int n){
    String ass = Integer.toString(n);
    for(int i=0;i<ass.length();i++)
    {
        if(ass.charAt(i)!=ass.charAt(ass.length()-1-i))
            return false;
    }
    return true;
}

public static int reverse(int n){
	String str = Integer.toString(n);
	String str2 = "";
	for(int i=str.length()-1;i>=0;i--)
		str2 += str.charAt(i);
	return Integer.parseInt(str2);
}

}

6.28

package demo;

import java.util.Scanner;

public class diliuzhang {
	System.out.print("p\t\t\t2^p-1\n");
	System.out.print("----------------------------\n");
	for(int i=2;i<=31;i++){
		int num = (int)Math.pow(2, i)-1;
		if(isPrime(num))
			System.out.printf("%d\t\t\t%-4d\n", i,num);
	}
    }
    public static boolean isPrime(int n){
        for(int i=2;i<=n/2;i++){
            if(n%i==0)
                return false;
        }
        return true;
    }

}

6.29

package demo;

import java.util.Scanner;

public class diliuzhang {
	for(int i=2;i<=997;i++){
	if(isPrime(i)&&isPrime(i+2))
		System.out.printf("( %d , %d )\n",i,i+2);
}
}
public static boolean isPrime(int n){
    for(int i=2;i<=n/2;i++){
        if(n%i==0)
            return false;
    }
    return true;
}

}

6.30

package demo;

import java.util.Scanner;

public class diliuzhang {
      throwDice();
    }
public static boolean throwDice()
{
    int num1 = (int)(Math.random()*6)+1;
    int num2 = (int)(Math.random()*6)+1;
    int sum = num1+num2;
    if(sum==2||sum==3||sum==12) {
        System.out.printf("You rolled %d+%d = %d\nYou lose\n",num1,num2,sum);
        return false;
    }
    else if(sum==7||sum==11) {
        System.out.printf("You rolled %d+%d = %d\nYou win\n",num1,num2,sum);
        return true;
    }
    else
    {
        System.out.printf("You rolled %d+%d = %d\n",num1,num2,sum);
        System.out.println("point is "+sum);
        int sum2 = sum;
        do{
            int num3 = (int)(Math.random()*6)+1;
            int num4 = (int)(Math.random()*6)+1;
            sum=num3+num4;
            System.out.printf("You rolled %d+%d = %d\n",num3,num4,sum);
            if(sum==7){
                System.out.println("You lose");
                return false;
            }
            else if(sum!=sum2)
                System.out.println("point is "+sum);
        }while(sum!=sum2); //这里使用do-while语句好处就是先执行一次,再判断。
        System.out.println("You win");
        return true;
    }
} 

}

6.31

package demo;

import java.util.Scanner;

public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a credit card number: ");
    String num = input.next();
    if(isValid(num))
        System.out.println(num+" is valid");
    else
        System.out.println(num+" is invalid");
}
public static boolean isValid(String number){
    if(number.length()<13||number.length()>16)
        return false;
    else
    {
        return (sumOfDoubleEvenPlace(number)+sumOfOddPlace(number))%10==0;
    }
}

public static int sumOfDoubleEvenPlace(String number){
    int sum=0;
    for(int i=number.length()-2;i>=0;i-=2)
        sum+=getDigit(2*(number.charAt(i)-'0'));
    return sum;
}

public static int getDigit(int number){
    if(number<10)
        return number;
    else
        return number/10+number%10;
}

public static int sumOfOddPlace(String number){
    int sum=0;
    for(int i=number.length()-1;i>=0;i-=2)
        sum+=(int)(number.charAt(i)-'0');
    return sum;
}

public static boolean prefixMatched(String number){
    char c1=number.charAt(0);
    char c2=number.charAt(1);
    return c1 == '4' || c1 == '5' || c1 == '6' || (c1 == '3') && (c2 == 7);
}

}

没按照题目上的格式来,不过方法是对的。

6.32

package demo;

import java.util.Scanner;

public static void main(String[] args){
			int count = 0;
			for(int i=0;i<10000;i++){
				if(throwDice())
					count++;
			}
			System.out.println("you won "+count+" times.");
	    }

public static boolean throwDice()
	    {
	        int num1 = (int)(Math.random()*6)+1;
	        int num2 = (int)(Math.random()*6)+1;
	        int sum = num1+num2;
	        if(sum==2||sum==3||sum==12) {
	            System.out.printf("You rolled %d+%d = %d\nYou lose\n",num1,num2,sum);
	            return false;
	        }
	        else if(sum==7||sum==11) {
	            System.out.printf("You rolled %d+%d = %d\nYou win\n",num1,num2,sum);
	            return true;
	        }
	        else
	        {
	            System.out.printf("You rolled %d+%d = %d\n",num1,num2,sum);
	            System.out.println("point is "+sum);
	            int sum2 = sum;
	            do{
	                int num3 = (int)(Math.random()*6)+1;
	                int num4 = (int)(Math.random()*6)+1;
	                sum=num3+num4;
	                System.out.printf("You rolled %d+%d = %d\n",num3,num4,sum);
	                if(sum==7){
	                    System.out.println("You lose");
	                    return false;
	                }
	                else if(sum!=sum2)
	                    System.out.println("point is "+sum);
	            }while(sum!=sum2); //这里使用do-while语句好处就是先执行一次,再判断。
	            System.out.println("You win");
	            return true;
	        }
} 

}

6.33

咳,看6.25习题答案吧,稍微改改就行,实在不想做一遍了。。。。

6.34

package demo;

import java.util.Scanner;

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter full year (e.g., 2012): ");
        int year = input.nextInt();
        System.out.print("What day is January 1, "+year+" ? ");
        int week = input.nextInt();
        int month = 1, day = 0;
        String monthString = "";
        boolean leapYear;
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 3200 != 0) || year % 172800 == 0)
            leapYear = true;
        else
            leapYear = false;
        for (; month <= 12; month++) {
            switch (month) {
                case 1:
                    monthString = "January";
                    break;
                case 2:
                    day += 31;
                    monthString = "February";
                    break;
                case 3:
                    monthString = "March";
                    if (leapYear)
                        day += 29;
                    else
                        day += 28;
                    break;
                case 4:
                    day += 31;
                    monthString = "April";
                    break;
                case 5:
                    day += 30;
                    monthString = "May";
                    break;
                case 6:
                    day += 31;
                    monthString = "June";
                    break;
                case 7:
                    day += 30;
                    monthString = "July";
                    break;
                case 8:
                    day += 31;
                    monthString = "August";
                    break;
                case 9:
                    day += 31;
                    monthString = "September";
                    break;
                case 10:
                    day += 30;
                    monthString = "October";
                    break;
                case 11:
                    day += 31;
                    monthString = "November";
                    break;
                case 12:
                    day += 30;
                    monthString = "December";
            }
            int days = (week + day) % 7;
            System.out.print("\n           " + monthString + " " + year + "\n---------------------------------");
            System.out.printf("\n%-5s%-5s%-5s%-5s%-5s%-5s%-5s\n", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
        for (int n =1;n<=days;n++) {
            System.out.printf("%-5s", "");
        }
           int j = 1;
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ||
            month == 12) {
        for (; j <= 31; j++) {
            System.out.printf("%-5d", j);
            if ((days+j) % 7 == 0)
                System.out.println();
        }
    }
    else if (month == 2 && leapYear) {
        for (; j <= 29; j++) {
            System.out.printf("%-5d", j);
            if ((days+j) % 7 == 0)
                System.out.println();
        }
    }
    else if (month == 2) {
        for (; j <= 28; j++) {
            System.out.printf("%-5d", j);
            if ((days+j) % 7 == 0)
                System.out.println();
        }
    }
    else {
        for (; j <= 30; j++) {
            System.out.printf("%-5d", j);
            if ((days + j) % 7 == 0)
                System.out.println();
        }
    }
    System.out.print("\n");
    switch (days) {
        case 0:
            System.out.print("Sun");break;
        case 1:
            System.out.print("Mon");break;
        case 2:
            System.out.print("Tue");break;
        case 3:
            System.out.print("Wed");break;
        case 4:
            System.out.print("Thu");break;
        case 5:
            System.out.print("Fri");break;
        case 6:
            System.out.print("Sat");
    }
    System.out.println(" starts on the first day of "+monthString);
}

}

}

6.35

package demo;

import java.util.Scanner;

public static void main(String[] args){
		System.out.print("Enter the side: ");
		Scanner input = new Scanner(System.in);
		double s = input.nextDouble();
		System.out.println("The area of the pentagon is "+area(s));
	}
public static double area(double side){
		double area;
		area = (5*Math.pow(side, 2))/(4*Math.tan(Math.PI/5));
		return area;
	}

}

6.36

package demo;

import java.util.Scanner;

public static void main(String[] args){
		System.out.print("Enter the number of sides: ");
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		System.out.print("Enter the side: ");
		double s = input.nextDouble();
		System.out.println("The area of the pentagon is "+area(n,s));
	}
public static double area(int n,double side){
		double area;
		area = (n*Math.pow(side, 2))/(4*Math.tan(Math.PI/n));
		return area;
	}

}

6.37

package demo;

import java.util.Scanner;

public static void main(String[] args){
		System.out.print("Enter the number: ");
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		System.out.print("Enter the width: ");
		int w = input.nextInt();
		System.out.println("The format of the number is  "+format(n,w));
	}
public static String format(int number,int width){
		String str = Integer.toString(number);
		int len = str.length();
		if(len>=width)
			return str;
		else{
			String str2="";
			for(int i=1;i<=width-len;i++){
				str2+='0';
			}
			return str2+str;
		}	
}

}

6.38

package demo;

import java.util.Scanner;

public static void main(String[] args) {
        for(int i=1;i<=100;i++)
        {
            System.out.print(getRandomUpperCaseLetter()+" ");
            if(i%10==0)
                System.out.print('\n');
        }
        for(int i=1;i<=100;i++)
        {
            System.out.print(getRandomDigitCharacter()+" ");
            if(i%10==0)
                System.out.print('\n');
        }
    }
public static char getRandomCharacter(char ch1,char ch2)
    {
        return (char)(ch1+Math.random()*(ch2-ch1+1));
    }
public static char getRandomUpperCaseLetter()
    {
        return getRandomCharacter('A','Z');
    }
public static char getRandomDigitCharacter()
    {
        return getRandomCharacter('0','9');
    }

}

6.39

package demo;

import java.util.Scanner;

public static void main(String[] args){
	        Scanner input = new Scanner(System.in);
	        System.out.print("Enter three points for p0,p1,p2: ");
	        double x0 = input.nextDouble();
	        double y0 = input.nextDouble();
	        double x1 = input.nextDouble();
	        double y1 = input.nextDouble();
	        double x2 = input.nextDouble();
	        double y2 = input.nextDouble();
	        if(leftOfTheLine(x0,y0,x1,y1,x2,y2))
	            System.out.print("("+x2+","+y2+")"+" is on the left side of the line from "+"("+x0+","+y0+")"+" to "+"("+x1+","+y1+")");
	        else if(onTheLineSegment(x0,y0,x1,y1,x2,y2))
	            System.out.print("("+x2+","+y2+")"+" is on the line segment from "+"("+x0+","+y0+")"+" to "+"("+x1+","+y1+")");
	        else if(onTheSameLine(x0,y0,x1,y1,x2,y2))
	            System.out.print("("+x2+","+y2+")"+"is on the same line from "+"("+x0+","+y0+")"+" to "+"("+x1+","+y1+")");
	        else
	            System.out.print("("+x2+","+y2+")"+"is on the right side of the line "+"("+x0+","+y0+")"+" to "+"("+x1+","+y1+")");
	    }
public static boolean leftOfTheLine(double x0,double y0,double x1,double y1,double x2,double y2){
	        return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)>0;
	    }
public static boolean onTheSameLine(double x0,double y0,double x1,double y1,double x2,double y2){
	        return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)==0;
	    }
public static boolean onTheLineSegment(double x0,double y0,double x1,double y1,double x2,double y2){
	        return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)==0&&x2>=x0&&x2<=x1;
	    }

}

第六章习题 完

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值