1. 程式人生 > >java語言程式設計基礎篇第六章程式設計練習題

java語言程式設計基礎篇第六章程式設計練習題

1

import java.util.Scanner;
public class Main{
	public static void main(String[] args){
		final int NUMBER = 100;
		int count = 0;
		Scanner input = new Scanner(System.in);
		while(count < NUMBER){
			System.out.print(getPentagonalNumber(count+1) + " ");
			if((count+1) % 10 == 0)
				System.out.println();
			++count;
		}
	}
	
	public static int getPentagonalNumber(int n){
		return n*(3*n-1)/2;
	}
}

2

import java.util.Scanner;
public class Main{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		System.out.println(sumDigits(n));
	}
	
	public static int sumDigits(int n){
		int sum = 0;
		while(n != 0){
			sum += n % 10;
			n = n / 10;
		}
		return sum;
	}
}
3

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	int num = input.nextInt();
    	if(isPalindrome(num))
    		System.out.println(num + " is palindrome.");
    	else
    		System.out.println(num + " is not palindrome.");
    	
    }
    
    public static int reverse(int number){
    	int num = 0;
    	while(number != 0){
    		num = num*10 + number%10;
    		number /= 10;
    	}
    	return num;
    }
    
    public static boolean isPalindrome(int number){
    	if(number == reverse(number))
    		return true;
    	return false;
    }
    
}

4

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	int num = input.nextInt();
    	System.out.println(reverse(num));
    }
    
    public static int reverse(int number){
    	int num = 0;
    	while(number != 0){
    		num = num*10 + number%10;
    		number /= 10;
    	}
    	return num;
    }
}

5

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	double num1 = input.nextDouble();
    	double num2 = input.nextDouble();
    	double num3 = input.nextDouble();
    	displaySortedNumber(num1,num2,num3);
    }
    
    public static void displaySortedNumber(double num1, double num2, double num3){
    	double temp = 0;
    	if(num1 > num2){
    		temp = num1;
    		num1 = num2;
    		num2 = temp;
    	}
    	if(num1 > num3){
    		temp = num1;
    		num1 = num3;
    		num3 = temp;
    	}
    	
    	if(num2 > num3){
    		temp = num2;
    		num2 = num3;
    		num3 = temp;
    	}
    	System.out.println(num1 + " " + num2 + " " + num3);
    }
}

6

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	int num = input.nextInt();
    	displayPattern(num);
    }
    
    public static void displayPattern(int n){
    	for(int i = 1; i <= n; ++i){
    		for(int j = 1; j <= n-i; ++j)
    			System.out.print(" ");
    		for(int j = i; j > 0; --j)
    			System.out.print(j);
    		System.out.println();
    	}
    }
}

7,8,9

套公式

10

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	int count = 0;
    	for(int i = 1; i <= 10000; ++i){
    		if(isPrime(i))
    			++count;
    	}
    	System.out.println(count);
    }
    
    public static boolean isPrime(int n){
    	if(n == 1)
    		return false;
    	for(int i = 2; i*i <= n; ++i){
    		if(n%i == 0)
    			return false;
    	}
    	return true;
    }
}

11

。。。。

12

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	printChars('1','Z',10);
    }
    
    public static void printChars(char ch1, char ch2, int numberPerLine){
    	int count = 0;
    	for(int i = ch1; i <= ch2; ++i){
    		System.out.print((char)i);
    		++count;
    		if(count%10 == 0)
    			System.out.println();
    	}
    }
}

13

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	for(int i = 1; i <= 20; ++i){
    		System.out.println(i + "        " + m(i));
    	}
    }
    
    public static double m(int n){
    	double sum = 0.0;
    	for(int i = 1; i <= n; ++i)
    		sum += (double)i/(double)(i+1);
    	return sum;
    }
}

14

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	for(int i = 1; i <= 901; i += 100){
    		System.out.println(i + "        " + m(i));
    	}
    }
    
    public static double m(int n){
    	double sum = 0.0;
    	int one = 1;
    	for(int i = 1; i <= n; ++i){
    		sum += one/(double)(2*i-1);
    		one = -one;
    	}
    	return 4*sum;
    }
}

15,16

。。。。。。。

17

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	int n = input.nextInt();
    	printMatrix(n);
    }
    
    public static void printMatrix(int n){
    	for(int i = 0; i < n; ++i){
    		for(int j = 0; j < n; ++j){
    			System.out.print((System.currentTimeMillis()/(j+i+1))%2 + " ");
    		}
    		System.out.println();
    	}
    }
}

18

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	System.out.print("Enter password:");
    	String password = input.next();
    	if(isValidPassWord(password)){
    		System.out.println("Valid Password");
    	}
    	else
    		System.out.println("Invalid Password");
    }
    
    public static boolean isValidPassWord(String str){
    	if(str.length() < 8)
    		return false;
    	int count = 0;
    	for(int i = 0; i < str.length(); ++i){
    		if(!Character.isDigit(str.charAt(i)) && !Character.isLetter(str.charAt(i)))
    			return false;
    		if(Character.isDigit(str.charAt(i)))
    			++count;
    	}
    	if(count < 2)
    		return false;
    	return true;
    }
}

19,20,21

。。。。。。

22

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	double n = input.nextDouble();
    	System.out.println(sqrt(n));
    }
    
    public static double sqrt(double n){
    	double nextGuess = 0;
    	double lastGuess = 1.0;
    	while(true){
    		nextGuess = (lastGuess + n/lastGuess) / 2;
    		if(Math.abs(nextGuess - lastGuess) < 0.0001)
    			return nextGuess;
    		lastGuess = nextGuess;
    	}
    }
}

23

。。。。。

24
參考第五章29題

25

貌似和程式清單2-7差不多

26

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	int count = 0;
    	int i = 1;
    	while(count < 100){
    		if(isPrime(i) && isPalindrome(i)){
    			System.out.print(i + " ");
    			++count;
    			if(count % 10 == 0)
    				System.out.println();
    		}
    		++i;
    	}
    }
    
    public static boolean isPalindrome(int number){
    	if(number == reverse(number))
    		return true;
    	return false;
    }
    
    public static int reverse(int number){
    	int num = 0;
    	while(number != 0){
    		num = num*10 + number%10;
    		number /= 10;
    	}
    	return num;
    }
    
    public static boolean isPrime(int n){
    	if(n == 1)
    		return false;
    	for(int i = 2; i*i <= n; ++i){
    		if(n%i == 0)
    			return false;
    	}
    	return true;
    }
}

27

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	int count = 0;
    	int i = 1;
    	while(count < 100){
    		if(isPrime(i) && isPrime(reverse(i))){
    			System.out.print(i + " ");
    			++count;
    			if(count % 10 == 0)
    				System.out.println();
    		}
    		++i;
    	}
    }
    
    public static int reverse(int number){
    	int num = 0;
    	while(number != 0){
    		num = num*10 + number%10;
    		number /= 10;
    	}
    	return num;
    }
    
    public static boolean isPrime(int n){
    	if(n == 1)
    		return false;
    	for(int i = 2; i*i <= n; ++i){
    		if(n%i == 0)
    			return false;
    	}
    	return true;
    }
}

28

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	for(int p = 1; p <= 31; ++p){
    		int n = (int)Math.pow(2, p)-1;
    		if(isPrime(n))
    			System.out.println(p + "        " + n);
    	}
    }

    public static boolean isPrime(int n){
    	if(n == 1)
    		return false;
    	for(int i = 2; i*i <= n; ++i){
    		if(n%i == 0)
    			return false;
    	}
    	return true;
    }
}

29

import java.util.Scanner;  
  
public class Main{  
    public static void main(String[] args){
    	int record = 2;
    	for(int i = 3; i <= 1000; ++i){
    		if(isPrime(i)){
    			if(i - record == 2){
	    			System.out.println("(" + record + ", " + i + ")");
	    			record = i;
    			}
    			else if(i - record < 2 && !isPrime(i+1))
    				record = i;
    			else if(i - record > 2)
    				record = i;
    		}
    	}
    }

    public static boolean isPrime(int n){
    	if(n == 1)
    		return false;
    	for(int i = 2; i*i <= n; ++i){
    		if(n%i == 0)
    			return false;
    	}
    	return true;
    }
}

30

。。。。。。

31

import java.util.Scanner;
public class Main {
	
	public static void main(String[] args){
		Scanner cin = new Scanner(System.in);
		long num = cin.nextLong();
		int size = getSize(num);
		boolean flag = false;
		if(prefixMatched(num,4) || prefixMatched(num,5) || prefixMatched(num,37) || prefixMatched(num,6))
			flag = true;
		if(size >= 13 && size <= 16 && flag && isValid(num)){
			System.out.println(num + " is valid");
		}
		else{
			System.out.println(num + " is invalid");
		}
	}
	
	public static boolean isValid(long number){
		int sum1 = sumOfDoubleEvenPlace(number);
		int sum2 = sumOfOddPlace(number);
		int sum = sum1+sum2;
		if(sum%10 == 0) return true;
		else return false;
	}
	
	public static int sumOfDoubleEvenPlace(long number){
		int len = 0;
		int sum = 0;
		int[] numarr = new int[20];
		int index = 0;
		while(number != 0){
			numarr[index++] = (int)(number%10);
			number /= 10;
		}
		for(int i = index-1; i >= 0; --i){
			++len;
			if(len%2 == 1){
				sum += getDigit(numarr[i]*2);
			}
		}
		return sum;
	}
	
	public static int getDigit(int number){
		if(number < 10)
			return number;
		return (number%10 + number/10);
	}
	
	public static int sumOfOddPlace(long number){
		int len = 0;
		int sum = 0;
		int[] numarr = new int[20];
		int index = 0;
		while(number != 0){
			numarr[index++] = (int)(number%10);
			number /= 10;
		}
		for(int i = index-1; i >= 0; --i){
			++len;
			if(len%2 == 0){
				sum += numarr[i];
			}
		}
		return sum;
	}

	public static boolean prefixMatched(long number, int d){
		String str = String.valueOf(number);
		String substr = String.valueOf(d);
		if(str.startsWith(substr))
			return true;
		return false;
	}
	
	public static int getSize(long d){
		int len = 0;
		while(d != 0){
			d /= 10;
			++len;
		}
		return len;
	}
	//感覺題目用不到這個方法啊
	public static long getPrefix(long number, int k){
		return 0;
	}
}

待續。。。。。