ProgramImplement.java
package ProgramPractice;
import java.util.*;
public class ProgramImplement {
//problem 1:calculate rabbits
# 古典问题:有一对兔子,从出生后第3个月起
# 每个月都生一对兔子,小兔子长到第三个月后
# 每个月又生一对兔子,假如兔子都不死,问每
# 个月的兔子对数为多少?
public void quantityOfRabbit() {
System.out.println("输入你想知道的具体月份:");
int month;
Scanner input = new Scanner(System.in);
while(!input.hasNextInt()) {
System.out.println("请输入正整数:");
input.next();
}
month = input.nextInt();
System.out.println("第" + month + "个月兔子数量为:" + fac(month));
System.out.println("前" + month + "个月兔子数量为:");
for(int i = 1; i < month; i++) {
System.out.print(fac(i) + " ");
}
input.close();
}
//recursion to calculate the quantity of rabbits
private static int fac(int i) {
if(i == 1 || i == 2) return 1;
return fac(i-1) + fac(i-2);
}
//problem 2:find the prime numbers between 101 to 200
# 判断101-200之间有多少个素数,并输出所有素数
public void findPrimeNumber() {
int sum = 0;
for(int i = 101; i < 201; i++) {
if(isPrimeNumber(i)) {
System.out.print(i + " ");
sum++;
}
}
System.out.println("总共有" + sum + "个素数");
}
//calculate a number is a prime number or not
private static boolean isPrimeNumber(int num) {
if(num < 2) return false;
for(int i = 2; i <= Math.sqrt(num); i++) {
if(num % i == 0) return false;
}
return true;
}
//problem 3:print all daffodil number
# 打印出所有的”水仙花数”,所谓”水仙花数”
# 是指一个三位数,其各位数字立方和等于该数
# 本身。例如:153是一个”水仙花数”,因为
# 153=1的三次方+5的三次方+3的三次方。
public void printDaffodilNumber() {
int unit, ten, hund;
for(int i = 100 ; i < 1000; i++) {
unit = i % 10;
ten = i / 10 % 10;
hund = i/100;
if(unit*unit*unit + ten*ten*ten + hund*hund*hund == i) {
System.out.print(i + " ");
}
}
}
//problem 4:decompose a number by multiple its factor
# 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
public void decomposeNumber() {
System.out.println("请输入你想分解的整数: ");
int number;
Scanner input = new Scanner(System.in);
while(!input.hasNextInt()) {
System.out.println("请输入一个正整数: ");
input.next();
}
number = input.nextInt();
if(number > 0) {
System.out.print(number + "=");
if(number == 1) System.out.print(number);
for(int i = 2; i <= number; i++) {
while(number % i == 0 && i != number) {
number /= i;
System.out.print(i + "*");
}
if(i == number) {
System.out.println(i);
break;
}
}
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
//problem 5:grading
# 利用条件运算符的嵌套来完成此题:学习成绩>=90分
# 的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
public void grade() {
System.out.println("请输入学生的成绩:");
double grade;
Scanner input = new Scanner(System.in);
while(!input.hasNextDouble()) {
System.out.println("请输入一个数字: ");
input.next();
}
grade = input.nextDouble();
String level = grade >= 90 ? "A" : (grade >= 60 ? "B" : "C");
System.out.println("该同学的级别为: " + level + "级");
input.close();
}
//problem 6:gcd and lcm
# 输入两个正整数m和n,求其最大公约数和最小公倍数。
public void gcdAndLcm() {
System.out.println("请输入两个正整数:");
int gcd, lcm;
Scanner input = new Scanner(System.in);
while(!input.hasNextInt()) {
System.out.println("请输入一个正整数: ");
input.next();
}
int num1 = input.nextInt();
while(!input.hasNextInt()) {
System.out.println("请输入一个正整数: ");
input.next();
}
int num2 = input.nextInt();
int temp = num1 * num2;
if(num1 > 0 && num2 > 0) {
gcd = gcdVal(num1, num2);
lcm = temp / gcd;
System.out.println("最大公约数为: " + gcd);
System.out.println("最小公倍数为: " + lcm);
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
//calculate the value of gcd
private static int gcdVal(int num1, int num2) {
int num3 = Math.max(num1, num2);
int num4 = Math.min(num1, num2);
int remainder = 1;
while(remainder != 0) {
remainder = num3 % num4;
num3 = num4;
num4 = remainder;
}
return num3;
}
//problem 7: calculate different type of char in a string
# 输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
public void quantityOfDifferentType() {
System.out.println("请输入一个字符串: ");
Scanner input = new Scanner(System.in);
String str = input.nextLine();
int len = str.length();
int letters = 0, space = 0, numbers= 0, otherType = 0;
char[] ch = str.toCharArray();
for(int i = 0; i < len; i++) {
if((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z')) {
letters++;
} else if(ch[i] == ' ') {
space++;
} else if(ch[i] >= '0' && ch[i] <= '9') {
numbers++;
} else {
otherType++;
}
}
System.out.println("字符串中一共有: " + letters + "个字母");
System.out.println("字符串中一共有: " + space + "个空格");
System.out.println("字符串中一共有: " + numbers + "个数字");
System.out.println("字符串中一共有: " + otherType + "个其他字符");
input.close();
}
//problem 8:get the sum
# 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
# 例如2+22+222+2222+22222(此时共有5个数相加),
# 几个数相加有键盘控制。输出结果的形式如:2+22+222=246;
public void getTheSum() {
System.out.println("请输入个位数: ");
Scanner input = new Scanner(System.in);
while(!input.hasNextInt()) {
System.out.println("请输入一个正整数: ");
input.next();
}
int number = input.nextInt();
System.out.println("请输入需要相加的数的个数: ");
while(!input.hasNextInt()) {
System.out.println("请输入一个正整数: ");
input.next();
}
int size = input.nextInt();
if(size > 0) {
int temp = 0, sum = 0;
for(int i = 0; i < size-1; i++) {
temp += number;
sum += temp;
number *= 10;
System.out.print(temp + "+");
}
temp += number;
sum += temp;
System.out.print(temp + "=" + sum);
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
//problem 9:find the perfect number
# 一个数如果恰好等于它的因子之和,这个数就称为”完数”。
# 例如6=1+2+3.编程找出1000以内的所有完数。
public void findThePerfectNumber() {
for(int i = 1; i < 1000; i++) {
int num = 0;
for(int j = 1; j <= i/2; j++) {
if(i % j == 0) num += j;
}
if(i == num) System.out.print(i + " ");
}
}
//problem 10: get the distance which a ball has traveled and the height right now
# 一球从h米高度自由落下,每次落地后反跳回原高度的一半;再落下,
# 求它在 第n次落地时,共经过多少米?第n次反弹多高?
public void getDistanceAndHeight() {
System.out.println("请输入下落高度以及落地次数: ");
Scanner input = new Scanner(System.in);
while(!input.hasNextFloat()) {
System.out.println("请输入一个数字: ");
input.next();
}
float height = input.nextFloat();
while(!input.hasNextInt()) {
System.out.println("请输入一个整数: ");
input.next();
}
int n = input.nextInt();
if(n > 0 && height > 0) {
float distance = height;
height /= 2;
for(int i = 2; i <= n; i++) {
distance += height*2;
height /= 2;
}
System.out.println("第" + n + "次落地时共经过" + distance + "米");
System.out.println("第" + n + "次反弹高度为" + height + "米");
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
//problem 11: get different and no-repeat number constructed by number 1, 2, 3, 4
# 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public void differentAndNoRepeatNumber() {
for(int i = 1; i <= 4; i++) {
for(int j = 1; j <= 4; j++) {
if(i == j) continue;
for(int k = 1; k <= 4; k++) {
if(j == k || i == k) continue;
System.out.print(i*100 + j*10 + k + " ");
}
}
}
}
//problem 12: calculate the bonus base on profit
# 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;
# 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万
# 元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;
# 40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,
# 高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,
# 从键盘输入当月利润I,求应发放奖金总数?
public void calculateBonus() {
double profit, bonus;
System.out.println("请输入当月利润:");
Scanner input = new Scanner(System.in);
while(!input.hasNextDouble()) {
System.out.println("请输入一个数字:");
input.next();
}
profit = input.nextDouble();
if(profit < 0) {
input.close();
throw new RuntimeException();
} else if(profit <= 10) {
bonus = profit*0.1;
} else if(profit <= 20) {
bonus = (profit - 10)*0.075 + 1;
} else if(profit <= 40 ) {
bonus = (profit - 20)*0.05 + 20*0.075 + 1;
} else if(profit <= 60 ) {
bonus = (profit - 40)*0.03 + 40*0.05 + 20*0.075 + 1;
} else if(profit <= 100 ) {
bonus = (profit - 60)*0.015 + 60*0.03 + 40*0.05 + 20*0.075 + 1;
} else {
bonus = (profit - 100)*0.01 + 100*0.015 + 60*0.03 + 40*0.05 + 20*0.075 + 1;
}
System.out.println(profit + "万元利润,可以获得:" + bonus + "万元奖金");
input.close();
}
//problem 13: find the perfect square number
# 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public void findPerfectNumber() {
int num1, num2;
for(int i = -100; i < 1000001; i++) {
num1 = (int)Math.sqrt(i + 100);
num2 = (int)Math.sqrt(i + 268);
if(num1*num1 == i + 100 && num2*num2 == i + 268)
System.out.println(i);
}
}
//problem 14: calculate a date and output what number it is in a year
# 输入某年某月某日,判断这一天是这一年的第几天?
public void calculateADate() {
System.out.println("请输入年月日:");
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int month = input.nextInt();
int day = input.nextInt();
int sum = day;
int[] arr = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(year >= 0 && (month > 0 && month <13) && (day <= arr[month]) && day > 0) {
for(int i = 0; i < month-1; i++) {
sum += arr[i];
}
if(!((year % 400 == 0 || ((year % 4 == 0) && (year % 100 != 0))) && (month > 2))) {
sum -= 1;
}
System.out.println("这是这一年的第" + sum + "天");
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
//problem 15: sort three numbers in down order
# 输入三个整数x,y,z,请把这三个数由小到大输出。
public void sortThreeNumber() {
sortThreeNumbers("descend");
}
private static void sortThreeNumbers(String str) {
System.out.println("请输入三个数字:");
Scanner input = new Scanner(System.in);
while(!input.hasNextInt()) {
System.out.println("请输入数字!");
input.next();
}
int x = input.nextInt();
int y = input.nextInt();
int z = input.nextInt();
int max = Math.max(x, y);
int min = Math.min(x, y);
int temp = max > z ? z : max;
temp = min < temp ? temp : min;
max = max > z ? max : z;
min = min < z ? min : z;
if(str == "descend") {
System.out.println(max + " " + temp + " " + min);
} else if (str == "ascend") {
System.out.println(min + " " + temp + " " + max);
}
input.close();
}
//problem 16: multiple table
# 输出9*9口诀。
public void multipleTable() {
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i*j + " ");
}
System.out.println();
}
}
//problem 17: calculate the sum of peaches which monky picked
# 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
# 还不瘾,又多吃了一个第二天早上又将剩下的桃子 吃掉一半,
# 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
# 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
public void getTheSumOfPeach() {
int sum = 1;
for(int i = 9; i > 0; i--) {
sum = 2*(sum+1);
}
System.out.println("一共摘了" + sum + "个");
}
//problem 18: print the list of three race
# 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
# 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,
# c说他不和x,z比,请编程序找出三队赛手的名单。
public void getTheListOfRace() {
String a, b, c;
String[] arr = {"x", "y", "z"};
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(i == j) continue;
for(int k = 0; k < 3; k++) {
if(j == k || i == k) continue;
a = arr[i];
b = arr[j];
c = arr[k];
if(!a.equals("x") && !c.equals("x") && !c.equals("z")) {
System.out.println("a的对手是:"+a+" b的对手是:"+b+" c的对手是:"+c);
}
}
}
}
}
//problem 19: print a diamond
# 打印出如下图案(菱形)
# *
# ***
# *****
# *******
# *****
# ***
# *
public void printADiamond() {
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 3-i; j++) {
System.out.print(" ");
}
for(int k = 0; k <= 2*i; k++) {
System.out.print("*");
}
System.out.println();
}
for(int i = 3; i > 0; i--) {
for(int j = 3-i+1; j > 0; j--) {
System.out.print(" ");
}
for(int k = 0; k < 2*i-1; k++) {
System.out.print("*");
}
System.out.println();
}
}
//problem 20: calculate the sum of 20 fractional numbers
# 有一分数序列:2/1,3/2,5/3,8/5,13/8,
# 21/13...求出这个数列的前20项之和。
public void getTheSumOfFractionalNumbers() {
float numerator = 2;
float denominator = 1;
float fraction;
float sum = 0;
float temp;
for(int i = 0; i < 20; i++) {
fraction = numerator/denominator;
sum += fraction;
temp = numerator + denominator;
denominator = numerator;
numerator = temp;
}
System.out.print(sum);
}
//problem 21: calculate the sum of 20 numbers' factorial
# 求1+2!+3!+...+20!的和
public void getTheSumOfFactorial() {
int sum = 0;
for(int i = 1; i <= 20; i++) {
sum += getTheFactorial(i);
}
System.out.println(sum);
}
//get the factorial of a number
private static int getTheFactorial(int i) {
int res = 1;
for(int j = 1; j <= i; j++) {
res *= j;
}
return res;
}
//problem 22: get the factorial by recursion
# 利用递归方法求5!。
public void getTheFactorialByRecursion() {
System.out.println(recursionFactorial(5));
}
private static int recursionFactorial(int i) {
if(i == 1) return 1;
return i * recursionFactorial(i-1);
}
//problem 23: get the age of the 5th person
# 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,
# 他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。
# 最后问第一个人,他说是10岁。请问第五个人多大?
//non-recursion
public void getTheAge() {
int age = 10;
for(int i = 2; i <= 5; i++) {
age += 2;
}
System.out.println(age);
}
//recursion
public void getTheAgeByRecursion() {
System.out.println(rec(5, 2));
}
private static int rec(int number, int age) {
if(number == 1) return 10;
return age + rec(number - 1, age);
}
//problem 24: print a number in inverted sequence
# 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
public void backwardPrint() {
System.out.println("请输入一个不大于5位的正整数:");
Scanner input = new Scanner(System.in);
int number;
while(!input.hasNextInt()) {
System.out.println("请输入正整数:");
input.next();
}
number = input.nextInt();
int i = 0;
int[] arr = new int[5];
if(number > 0) {
while(number != 0) {
arr[i] = number % 10;
number /= 10;
i++;
}
System.out.println("这是一个" + i + "位数,逆序输出结果为;");
for(int j = 0; j < i; j++) {
System.out.print(arr[j] + " ");
}
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
//problem 25: judge a number if a 5 bit palindrome number or not
# 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
public void palindromeNumber() {
System.out.println("请输入一个5位的正整数:");
Scanner input = new Scanner(System.in);
int number;
while(!input.hasNextInt()) {
System.out.println("请输入正整数:");
input.next();
}
number = input.nextInt();
int i = 0;
int[] arr = new int[5];
if(number > 0) {
while(number != 0) {
arr[i] = number % 10;
number /= 10;
i++;
}
if(i != 5) {
input.close();
throw new RuntimeException();
}
if(arr[0] == arr[4] && arr[1] == arr[3]) {
System.out.println("这是一个回文数!");
} else {
System.out.println("这不是一个回文数!");
}
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
// problem 26: judge the date is what day by input
# 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
public void whatDayIsIt() {
System.out.println("请输入第一个字母:");
Scanner input = new Scanner(System.in);
String ch;
ch = input.next();
String ch1;
switch(ch) {
case "m":
System.out.println("Monday");
break;
case "t":
System.out.println("请输入第二个字母:");
ch1 = input.next();
switch(ch1) {
case "u":
System.out.println("Tuesday");
break;
case "h":
System.out.println("Thursday");
break;
default:
System.out.println("输入有误!");
break;
}
case "w":
System.out.println("Wednesday");
break;
case "f":
System.out.println("Friday");
break;
case "s":
System.out.println("请输入第二个字母:");
ch1 = input.next();
switch(ch1) {
case "a":
System.out.println("Saturday");
break;
case "h":
System.out.println("Sunday");
break;
default:
System.out.println("输入有误!");
break;
}
default:
System.out.println("输入有误!");
break;
}
input.close();
}
//problem 27: print the prime number within 100
# 求100之内的素数
public void primeNumberWithinOneHundred() {
for(int i = 2; i < 100; i++) {
if(isPrimeNumber(i)) {
System.out.print(i + " ");
}
}
}
//problem 28: sort 10 numbers
# 对10个数进行排序
public void sortNumbers() {
System.out.println("请输入十个数字:");
Scanner input = new Scanner(System.in);
double[] arr = new double[10];
for(int i = 0; i < 10; i++) {
arr[i] = input.nextDouble();
}
input.close();
quickSort(arr, 0, 9);
System.out.println("排列后的数组:"+Arrays.toString(arr));
}
private static void quickSort(double[] arr, int low, int high) {
int i, j;
double temp;
if(low > high){
return;
}
i = low;
j = high;
temp = arr[low];
while(i < j) {
while(temp <= arr[j] && i < j) {
j--;
}
while(temp >= arr[i] && i < j) {
i++;
}
if (i < j) {
double z = arr[i];
double y = arr[j];
arr[i] = y;
arr[j] = z;
}
}
arr[low] = arr[i];
arr[i] = temp;
quickSort(arr, low, j-1);
quickSort(arr, j+1, high);
}
//problem 29: calculate the sum of numbers in diagonal of a 3*3 matrix
# 求一个3*3矩阵对角线元素之和
public void sumOfNumberInDiagonal() {
System.out.println("请输入3*3矩阵");
Scanner input = new Scanner(System.in);
double[][] matrix = new double[3][3];
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
matrix[i][j] = input.nextDouble();
}
}
System.out.println("左上角到右下角的对角线的元素之和为:" + (matrix[0][0] + matrix[1][1] + matrix[2][2]));
System.out.println("左下角到右上角的对角线的元素之和为:" + (matrix[0][2] + matrix[1][1] + matrix[2][0]));
input.close();
}
//problem 30: print a number in a sorted array
# 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
public void insertANumberInSortedArray() {
System.out.println("请输入数组元素个数:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
double[] arr = new double[n];
double[] arr1 = new double[n+1];
for(int i = 0; i < n; i++) {
arr[i] = input.nextDouble();
}
quickSort(arr, 0, arr.length-1);
System.out.println("排列后的数组:"+Arrays.toString(arr));
System.out.println("请输入需要插入的元素");
double num = input.nextDouble();
if(num > arr[n-1]) {
for(int i = 0; i < n; i++) {
arr1[i] = arr[i];
}
arr1[n] = num;
} else {
for(int i = 0; i < n; i++) {
if(num < arr[i]) {
for(int j = 0; j < i; j++) {
arr1[j] = arr[j];
}
arr1[i] = num;
for(int j = i; j < n; j++) {
arr1[j+1] = arr[j];
}
break;
}
}
}
System.out.println("插入一个数后的数组为:"+Arrays.toString(arr1));
input.close();
}
//problem 31: reverse an array
# 将一个数组逆序输出
public void reverseAnArrayAndPrint() {
System.out.println("请输入数组元素个数:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
double[] arr = new double[n];
double[] arr1 = new double[n];
for(int i = 0; i < n; i++) {
arr[i] = input.nextDouble();
}
for(int i = 0; i < n; i++) {
arr1[i] = arr[n-1-i];
}
System.out.println("逆序输出如下:"+Arrays.toString(arr1));
input.close();
}
//problem 32: get the 4th to 7th bit from right to left in a number
# 取一个整数a从右端开始的4~7位。
public void getTheDesignateBitInANumber() {
System.out.println("输入一个大于7位的整数:");
Scanner input = new Scanner(System.in);
long number = input.nextLong();
int i = 0;
long temp = number;
while(temp != 0) {
temp /= 10;
i++;
}
if(i >= 7) {
long[] arr = new long[i];
int j = 0;
while(number != 0) {
arr[j] = number % 10;
number /= 10;
j++;
}
System.out.println(arr[6] + "" + arr[5] + "" + arr[4] + "" + arr[3]);
} else {
System.out.println("输入有误!");
}
input.close();
}
public void getTheDesignateBitInANumber1() {
System.out.println("输入一个整数:");
Scanner input = new Scanner(System.in);
long number = input.nextLong();
String str = Long.toString(number);
char[]ch = str.toCharArray();
int n = ch.length;
System.out.println(ch[n-7] + ch[n-6] + ch[n-5] + ch[n-4]);
input.close();
}
//problem 33: print the first ten line of pascal triangle
# 打印出杨辉三角形(要求打印出10行)
public void printThePascalTriangle() {
int[][] arr = new int[10][10];
for(int i = 0; i < 10; i++) {
arr[i][0] = 1;
}
for(int i = 1; i < 10; i++) {
for(int j = 1; j < 10; j++) {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
for(int i = 0; i < 10; i++) {
for(int j = 9-i; j > 0; j--) {
System.out.print(" ");
}
for(int k = 0; k < 10; k++) {
if(arr[i][k] != 0) {
System.out.print(arr[i][k] + " ");
}
}
System.out.println();
}
}
//problem 34: print three numbers in descending order
# 输入3个数a,b,c,按大小顺序输出。
public void printNumbersInDescendingOrder() {
sortThreeNumbers("ascend");
}
//problem 35: exchange elements in an array
# 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
public void exchangeElementInArrayAndPrint() {
System.out.println("请输入一组数字(以空格分开)");
Scanner input = new Scanner(System.in);
input.useDelimiter("\\s");
int[] arr = new int[100];
int len = 0;
while(input.hasNextInt()) {
arr[len++] = input.nextInt();
}
int[] temp = new int[len];
for(int i = 0; i < len; i++) {
temp[i] = arr[i];
}
int max = temp[0];
int min = max;
for(int i = 1; i < len; i++) {
if(temp[i] > max) {
max = temp[i];
}
if(temp[i] < min) {
min = temp[i];
}
}
int maxIndex = 0, minIndex = 0;
for(int i = 0; i < len; i++) {
if(temp[i] == max) maxIndex = i;
}
int tempElement = temp[0];
temp[0] = temp[maxIndex];
temp[maxIndex] = tempElement;
for(int i = 0; i < len; i++) {
if(temp[i] == min) minIndex = i;
}
tempElement = temp[len-1];
temp[len-1] = temp[minIndex];
temp[minIndex] = tempElement;
System.out.println(Arrays.toString(temp));
input.close();
}
//problem 36: right shift m bits for an n elements array
# 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
public void rightShift() {
System.out.println("请输入个数n:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] arr = new int[n];
System.out.println("请输入n个数");
for(int i = 0; i < n; i++) {
arr[i] = input.nextInt();
}
System.out.println("没移动前的数组:"+Arrays.toString(arr));
System.out.println("请输入要移动位数m");
int m = input.nextInt();
m %= n;
int[] temp = new int[n];
int index = 0;
for(int i = m; i < n; i++) {
temp[i] = arr[index++];
}
for(int i = 0; i < m; i++) {
temp[i] = arr[index++];
}
System.out.println("移动后的数组:"+Arrays.toString(temp));
input.close();
}
//problem 37: what number is left after counting off
# 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
# 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
void lastNumberLeft() {
System.out.println("请输入人数");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
if(n > 0) {
boolean[] arr = new boolean[n];
for(int i = 0; i < n; i++) {
arr[i] = true;
}
int currentIndex = 0;
int currentNumber = 0;
int currentSum = n;
while(currentSum > 1) {
if(arr[currentIndex]) {
currentNumber++;
if(currentNumber == 3) {
currentNumber = 0;
currentSum -= 1;
arr[currentIndex] = false;
}
}
currentIndex++;
if(currentIndex == n) {
currentIndex = 0;
}
}
for(int i = 0; i < n; i++) {
if(arr[i]) {
System.out.println(i+1);
}
input.close();
}
} else {
input.close();
throw new RuntimeException();
}
}
//problem 38: get the length of a string
# 写一个函数,求一个字符串的长度
public void getTheLength() {
System.out.println("请输入字符串");
Scanner input = new Scanner(System.in);
String str = input.next();
System.out.println("长度为:" + str.length());
input.close();
}
//problem 39: get the sum by call pointer function
# 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,
# 当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
public void getTheSumByCallPointerFunction() {
System.out.println("请输入一个整数:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
if(n > 0) {
if(n % 2 == 0) {
getSum(n, 2);
} else {
getSum(n, 1);
}
}
input.close();
}
private static void getSum(int n, int mode) {
double sum = 0;
for(double i = mode; i <= n; i += 2) {
sum += 1/i;
}
System.out.println(sum);
}
//problem 40: sort some strings
# 字符串排序
public void sortString() {
System.out.println("请输入字符串个数:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
String[] arr = new String[n];
for(int i = 0; i < n; i++) {
arr[i] = input.next();
}
for(int i = 0; i < n-1; i++) {
for(int j = i+1; j < n; j++) {
if(arr[i].compareToIgnoreCase(arr[j]) < 0) {
String str = arr[i];
arr[i] = arr[j];
arr[j] = str;
}
}
}
for(int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
input.close();
}
//problem 41: the minimun quantity of peaches in beach
# 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均
# 分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
# 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把
# 多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是
# 这样做的,问海滩上原来最少有多少个桃子?
public void calculateTheMinQuantityOfPeach() {
int number = 0;
int n = 1; //最后一只猴子所拿的数量
for(int i = 0; i < 5; i++) {
if(i == 0) {
number = 5*n + 1;
} else {
if(number % 4 != 0) {
n++;
i = -1;
} else {
number = 5*(number/4) + 1;
}
}
}
System.out.println(number);
}
//problem 42: 809*??=800*??+9*??+1
#其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。
#求??代表的两位数,及809*??后的结果。
public void getTheValue() {
String str = "";
for(int i = 10; i < 100; i++) {
if(809*i == 800*i + 9*i + 1) {
str += (i + " ");
}
}
if(str.contentEquals("")) {
System.out.println("没有符合的数");
} else {
System.out.println("合适的有" + str);
}
}
#problem 43: 求0—7所能组成的奇数个数。
public void getTheNumberOfOddNumber() {
int sum = 0;
int n = 8;
//一位数
sum += n/2;
//两位数
sum += (n/2)*(n-1);
//三位数
sum += (n/2)*(n-1)*n;
//四位数
sum += (n/2)*(n-1)*n*n;
//五位数
sum += (n/2)*(n-1)*n*n*n;
//六位数
sum += (n/2)*(n-1)*n*n*n*n;
//七位数
sum += (n/2)*(n-1)*n*n*n*n*n;
//八位数
sum += (n/2)*(n-1)*n*n*n*n*n*n;
System.out.println(sum);
}
#problem 44: 一个偶数总能表示为两个素数之和。
public void anEvenNumberIsSumOfTwoPrimeNumber() {
System.out.println("请输入一个偶数");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
while(num % 2 != 0) {
System.out.println("输入的不是偶数,请重新输入");
num = input.nextInt();
}
if(num == 0 || num == 2) {
System.out.println("0和2不能表示");
}
for(int i = 2; i < num; i++) {
if(isPrimeNumber(i) && isPrimeNumber(num-i)) {
System.out.println(num + "=" + i + "+" + (num-i));
}
}
input.close();
}
#problem 45: 判断一个素数能被几个9整除
public void timesOfDivide() {
System.out.println("请输入一个素数");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
if(!isPrimeNumber(num)) {
System.out.println("你输入的不是素数");
}
int count = 0;
while(num > 8) {
num /= 9;
count++;
}
System.out.println(count);
input.close();
}
#problem 46: 两个字符串连接程序
public void concatTwoString() {
System.out.println("请输入两个字符串");
Scanner input = new Scanner(System.in);
String str = input.next();
String str1 = input.next();
System.out.println(str + str1);
input.close();
}
#problem 47: 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*
public void printStar() {
System.out.println("请输入7个数(1-50)");
Scanner input = new Scanner(System.in);
int[] arr = new int[7];
for(int i = 0; i < 7; i++) {
arr[i] = input.nextInt();
if(arr[i] > 50 || arr[i] < 1) {
System.out.println("请输入1-50的数");
input.close();
throw new RuntimeException();
}
}
for(int i = 0; i < 7; i++) {
print(arr[i]);
}
input.close();
}
private static void print(int num) {
for(int i = 0; i < num; i++) {
System.out.print("*");
}
System.out.println();
}
#problem 48: 某个公司采用公用电话传递数据,数据是四位的整数,
#在传递过程中是加密的,加密规则如下:每位数字都加上5,
#然后用和除以10的余数代替该数字,再将第一位和第四位交换,
#第二位和第三位交换。
public void encrypteAFourBitNumber() {
System.out.println("请输入一个四位数字");
Scanner input = new Scanner(System.in);
int number = input.nextInt();
int[] arr = new int[4];
if(number > 999 && number < 10000) {
for(int i = 3; i >= 0; i--) {
arr[i] = (number % 10 + 5) % 10;
number /= 10;
}
int temp = arr[0];
arr[0] = arr[3];
arr[3] = temp;
temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
for(int i = 0; i < 4; i++) {
System.out.print(arr[i]);
}
input.close();
} else {
input.close();
throw new RuntimeException();
}
}
#problem 49: 计算字符串中子串出现的次数
public void calculateTheNumberOfSubstringAppearence() {
System.out.println("请输入字符串");
Scanner input = new Scanner(System.in);
String str = input.nextLine();
char[] ch = str.toCharArray();
int count = 0;
for(int i = 0; i < ch.length; i++) {
if(ch[i] == ' ' && ch[i+1] != ' ') {
count++;
}
}
count++;
System.out.println(count);
input.close();
}
}
Test.java
public class Test {
public static void main(String[] args) {
ProgramImplement test1 = new ProgramImplement();
test1.sortThreeNumber();
}
}
IOTest.java
package ProgramPractice;
import java.io.*;
#problem 50: 有五个学生,每个学生有3门课的成绩,
#从键盘输入以上数据(包括学生号,姓名,三门课成绩),
#计算出平均成绩,将原有的数据和计算出的平均分数
#存放在磁盘文件"stud"中。
public class IOTest {
String[] number = new String[8];
String[] name = new String[5];
float[][] grade = new float[5][3];
float[] sum = new float[5];
public static void main(String[] args) throws Exception {
IOTest stud = new IOTest();
stud.input();
stud.output();
}
void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean isRecord = true;
while(isRecord) {
try {
for(int i = 0; i < 5; i++) {
System.out.print("请输入学号:");
number[i] = br.readLine();
System.out.print("请输入姓名:");
name[i] = br.readLine();
for(int j = 0; j < 3; j++) {
System.out.print("请输入第" + (j+1) + "门课成绩:");
grade[i][j] = Integer.parseInt(br.readLine());
}
System.out.println();
sum[i] = grade[i][0]+grade[i][1]+grade[i][2];
}
isRecord = false;
} catch(NumberFormatException e) {
System.out.println("请输入一个数字!");
}
}
}
void output() throws IOException {
FileWriter fw = new FileWriter("C://Users//hl//Desktop//stud.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("No. "+"Name "+"grade1 "+"grade2 "+"grade3 "+"average");
bw.newLine();
for(int i = 0; i < 5; i++){
bw.write(number[i]);
bw.write(" " + name[i]);
for(int j = 0; j < 3; j++) {
bw.write(" "+grade[i][j]);
}
bw.write(" " + (sum[i]/5));
bw.newLine();
}
bw.close();
}
}