本人萌新一枚,通过自己对网上流传较广的已有的经典50道Java编程题分析理解整理(不少题型的考察点相识,换汤不换药),对每道题分析并敲写了代码(基本实现了题干要求),有的自认为解题思路还算巧妙,有的也许虽然实现了需求但是可能较为“死板“^ - ^,欢迎大家参阅批评指正!
【程序1】
题目:
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
分析:利用递归解决斐波那契数列。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
*/
public class Demo01_Fibonacci {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//Scanner类从键盘获取月份
System.out.println("请输入月份:");
int month = scanner.nextInt(); // 第几月
System.out.println("该月的兔子的对数:" + fun(month));//方法调用
}
public static int fun(int a) {
if (a == 1 || a == 2) {
return 1;
} else {
return (fun(a - 1) + fun(a - 2));
}
}
}
【程序2】
问题:判断101-200之间有多少个素数,并输出所有素数。
分析:for循环,Flag。
package com.offcn.csdn;
/**
* @author mahanyuan 判断101-200之间有多少个素数,并输出所有素数
*/
public class Demo02_PrimeNumberBetween101And200 {
public static void main(String[] args) {
for (int i = 101; i < 201; i++) {
boolean flag = true;
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.println(i);
}
}
}
}
【程序3】
题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数, 其各位数字立方和等于该数本身。 例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
分析:利用‘%’,‘/’拿到百,十,个位。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数, 其各位数字立方和等于该数本身。
* 例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
*/
public class Demo03_daffodilNumber {
public static void main(String[] args) {
for (int i = 101; i < 1000; i++) {
int b = i / 100; // 百位
int s = i / 10 % 10; // 十位
int g = i % 10; // 个位;
if (i == (b * b * b) + (s * s * s) + (g * g * g)) {
System.out.println(i);
}
}
}
}
【程序4】
题目: 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
分析:代码未考虑1,2,3这三个正整数。
package com.offcn.csdn;
/**
* @author mahanyuan 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
*/
public class Demo04_FactorizationPrimeFactor {
public static void main(String[] args) {
int num = 90;
int temp = num; // 防止最后一位质因数不出现
System.out.print(num + "=");
for (int i = 2; i <= temp / 2; i++) {
if (num == i) {
System.out.print(num);// 输出最后一位质因数
break;
}
if (num % i == 0) { // num = 90,(i=3)15
num = num / i; // num = 45, 5
i--; // i=1;
System.out.print((i + 1) + "*");
}
}
}
}
【程序5】
题目:利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
分析:if语句的运用。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 题目: 利用条件运算符的嵌套来完成此题:
* 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
*/
public class Demo05 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个成绩:");
int score = s.nextInt();
if (score >= 90) {
System.out.println("A");
} else if (score >= 60 && score < 90) {
System.out.println("B");
} else if (score < 60) {
System.out.println("C");
}
}
}
【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
分析:可写两个方法分别解决,小贴士:最大公约数从大的开始往下找。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 输入两个正整数m和n,求其最大公约数和最小公倍数。
*/
public class Demo06_CommonDivisor {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入两个正整数:");
int m = s.nextInt();
int n = s.nextInt();
fun1(m, n);
fun2(m, n);
}
// 最大公约数
public static void fun1(int a, int b) {
for (int i = a > b ? b : a; i >= 1; i--) {
if (a % i == 0 && b % i == 0) { // 遇到第一个能同时被两数整除的
System.out.println("最大公约数:" + i);
break;
}
}
}
// 最小公倍数
public static void fun2(int a, int b) {
for (int j = a > b ? a : b;; j++) {
if (j % a == 0 && j % b == 0) {
System.out.println("最小公倍数:" + j);
break;
}
}
}
}
【程序7】
题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
分析:利用ASKII码。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。 ASKII:65 - 90 : A - Z 97 -
* 122:a - z 32 : 空格 48 - 57 :数字 33 - 127 :其他字符
*
*/
public class Demo07_String {
public static void main(String[] args) {
int count1 = 0; // 统计大写字母
int count3 = 0; // 统计空格
int count4 = 0; // 统计数字
int count5 = 0; // 统计其他字符
Scanner s = new Scanner(System.in);
System.out.println("请输入内容:");
String str = s.nextLine();
// String str = "马汉渊 mahanyuan 123 @#$ ";// 初始化字符串
char[] arr = new char[str.length()]; // 定义一个新的字符数组
for (int i = 0; i < str.length(); i++) {// 将字符串中的字符放入
char a = str.charAt(i); // 字符数组中
// System.out.println((int)a); // 输出字符对应的ASKII码
// arr[i] = a;
// 利用ASKII码找大小写英文字母;以下同理
if ((int) a >= 65 && (int) a <= 90 || (int) a >= 97 && (int) a <= 122) {
count1++;
} else if ((int) a == 32) {
count3++;
} else if ((int) a >= 48 && (int) a <= 57) {
count4++;
} else {
count5++;
}
}
System.out.println("英文字母有:" + count1 + "个");
System.out.println("空格有:" + count3 + "个");
System.out.println("数字有:" + count4 + "个");
System.out.println("其他字符:" + count5 + "个");
}
}
【程序8】
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加有键盘控制。
分析:for循环控制累加,变量等。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
* 例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加有键盘控制。输出结果的形式如:2+22+222=246;
*/
public class Demo08_ {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字a,n:");
int num = sc.nextInt();
int b = sc.nextInt(); // 想加个数
int s = 1;
int sum = 0; // 每项值
int sum2 = 0;// 将每项值累加如: 2+22+222...
for (int i = 1; i <= b; i++) {
sum = sum + num * s;
s *= 10;
sum2 += sum;
}
System.out.println(sum2);
}
}
【程序9】
题目:一个数如果恰好等于它的因子之和, 这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
分析:没啥特别好分析的,注意类名尽量不要学我用拼音取名吧23333。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:一个数如果恰好等于它的因子之和, 这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
*/
public class Demo09_WanShu {
public static void main(String[] args) {
int sum = 0;
for (int j = 2; j <= 1000; j++) {
for (int i = 1; i < j; i++) {
if (j % i == 0) {
sum += i;
}
}
if (j == sum) {
System.out.println(j);
}
sum = 0; // 置0留着下轮继续使用
}
}
}
【程序10】
题目:一球从h米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
分析:画个草图应该就能分析出来(本题为方便检验将高度h定位100米)。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 一球从h米高度自由落下,每次落地后反跳回原高度的一半;
*再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
*/
public class Demo10 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入n");
int n = scanner.nextInt();
int sum = 100;// 本题将高度定位100
int x = 100;
int i;
for (i = 1; i < n; i++) { // 3表示第三次落地
x /= 2;
sum = sum + x;
}
if (i == 1) {
System.out.println("第" + n + "次落地反弹高度" + x / 2);
System.out.println("第" + n + "次落地经过距离" + sum);
} else {
System.out.println("第" + n + "次落地反弹高度" + x); // 反弹高度
System.out.println("第" + n + "次落地经过距离" + sum);
} // 经过距离
}
}
【程序11】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:别想的太复杂,利用for循环嵌套。
package com.offcn.csdn;
import java.util.Arrays;
import java.util.Random;
/**
* @author mahanyuan 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
public class Demo11 {
public static void main(String[] args) {
int count = 0;//用来统计最终结果的个数
for (int i = 1; i < 5; i++) {
for (int j = 1; j < 5; j++) {
for (int k = 1; k < 5; k++) {
if (i != j && i != k && j != k) {
System.out.println(i + " " + j + " " + k);
count++;
}
}
}
}
System.out.println(count);
}
}
【程序12】
题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
分析:算是数学应用题23333。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 企业发放的奖金根据利润提成。利润(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 class Demo12 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入月利润(万):");
int I = s.nextInt(); // 键盘输入利润I
if (I <= 10) {
System.out.println(I * 0.1 + "万");
}
if (I > 10 && I <= 20) {
System.out.println(1 + (I - 10) * 0.075 + "万");
}
if (I > 20 && I <= 40) {
System.out.println(1.75 + (I - 20) * 0.05 + "万");
}
if (I > 40 && I <= 60) {
System.out.println(2.75 + (I - 40) * 0.03 + "万");
}
if (I > 60 && I <= 100) {
System.out.println(3.35 + (I - 60) * 0.015 + "万");
}
if (I > 100) {
System.out.println(3.95 + (I - 100) * 0.01 + "万");
}
}
}
【程序13】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(完全平方数:一个数=另一个数的平方,如121=11^11)。
分析:下面写的是在1-1000内找到符合题干要求的;for循环嵌套。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
public class Demo13 {
public static void main(String[] args) {
int i = 0;
for (i = 1; i <= 1000; i++) {
for (int k = 1; k <= 100; k++) {
if (i + 100 == k * k) {
// System.out.println(i + " " + k);
for (int j = 1; j < 100; j++) {
if (i + 268 == j * j) {
System.out.println(i);
}
}
}
}
}
}
}
【程序14】
题目:输入某年某月某日,判断这一天是这一年的第几天?
分析:注意平年和闰年。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 输入某年某月某日,判断这一天是这一年的第几天?
*/
public class Demo14 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入年:");
int year = s.nextInt();
System.out.println("请输入月:");
int month = s.nextInt();
System.out.println("请输入日:");
int day = s.nextInt();
int sum = 0;
int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for (int i = 0; i < month - 1; i++) {
sum += arr[i];
}
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 && month >= 3) {
System.out.println(sum + day + 1);
} else {
System.out.println(sum + day);
}
}
}
【程序15】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
分析:程序里取巧利用了Arrays的一个现成方法直接进行从小到大排序,算是偷懒了。。。
package com.offcn.csdn;
import java.util.Arrays;
import java.util.Scanner;
/**
* @author mahanyuan 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
*/
public class Demo15 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("請輸入整數x:");
int x = s.nextInt();
System.out.println("請輸入整數y:");
int y = s.nextInt();
System.out.println("請輸入整數z:");
int z = s.nextInt();
int[] arr = new int[3];
arr[0] = x;
arr[1] = y;
arr[2] = z;
Arrays.sort(arr); // 利用sort方法。。。。
for (int i = 0; i <= 2; i++) {
System.out.print(arr[i]+" ");
}
}
}
【程序16】
题目:输出打印9*9口诀表。
分析:for循环嵌套,可利用"\t"(制表符)使得输出好看些。
package com.offcn.csdn;
/**
* @author mahanyuan 输出9*9口诀
*/
public class Demo16 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (j * i)+"\t");
}
System.out.println();
}
}
}
【程序17】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾, 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。
分析:利用递归。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
* 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
* 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。
*/
public abstract class Demo17 {
public static void main(String[] args) {
System.out.println("第一天摘了:" + fun(10, 1));
}
public static int fun(int day, int num) {
if (day - 1 == 0) {
return num;
} else {
System.out.println("第" + (day - 1) + "天未吃前早上一看还有: " + ((num + 1) * 2));
return fun(day - 1, (num + 1) * 2);
}
}
}
【程序18】
题目:两个乒乓球队进行比赛,甲队派出a,b,c;乙队派出x,y,z三人,已抽签决定比赛名单,打听到a说他不和x比,c说他不和x,z比,请编程找出三队赛手的名单。
分析:①c说他不和x,z比,说明他只和y比;
②a说他不和x比,但是y和c比了,所以他肯定是和z比;
③那剩下的x就是和b比了
package com.offcn.csdn;
public class Demo18 {
public static void main(String[] args) {
String a = null, b = null, c = null;// 甲队成员
String[] racer = { "x", "y", "z" };// 乙队成员
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
if (i != j && i != k && j != k) {
a = racer[i];
b = racer[j];
c = racer[k];
if (!a.equals("x") && !c.equals("z") && !c.equals("x")) {
if (a.equals(racer[i]) && b.equals(racer[j]) && c.equals(racer[k])) {
System.out.println("a的对手是:" + racer[i] + ",\nb的对手是:" + racer[j] + ",\nc的对手是:" + racer[k]);
}
}
}
}
}
}
}
}
【程序19】
题目:打印菱形。
分析:程序以”*“为例打印,找空格和星号之间的规律联系。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:打印出如下图案(菱形):
* 3个空格1个*
*** 2个空格3个*
***** 1个空格5个*
******* 0个空格7个* 中间最长必为奇数
***** 1个空格5个*
*** 2个空格3个*
* 3个空格1个*
*/
public class Demo19 {
public static void main(String[] args) {
String str = "";
int k = 7 / 2; // 控制上半部分空格时有用
int q = 1; // 控制下半部分空格时有用
for (int i = 1; i <= 7; i++) { // 控制上部分
for (int m = k; m >= 1; m--) { // 控制空格
System.out.print(" ");
}
k--;
for (int j = i; j >= 1; j--) {// 控制打印*的个数
str += "*";
}
System.out.println(str);
str = ""; // 防止不断累积*
i++;
}
for (int i = 5; i >= 1; i--) { // 控制下部分
for (int n = 1; n <= q; n++) { // 空格
System.out.print(" ");
if (q == 4) {
break;
}
}
q++;
for (int j = i; j >= 1; j--) { // 控制打印*的个数
str += "*";
}
System.out.println(str);
str = "";
i--;
}
}
}
【程序20】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13… 求出这个数列的前20项之和。
分析:抓住分子与分母的变化规律后累加即可,下面参考代码中还用了递归处理。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13… 求出这个数列的前20项之和。
*
* 程序分析:请抓住分子与分母的变化规律。分数:fraction
*/
public class Demo20 {
public static void main(String[] args) {
double sum = 0;
for (double i = 1; i <= 20; i++) {
sum += (fun1(i) / fun2(i));
}
System.out.println(sum);
}
public static double fun1(double a) { // 递归处理分子
if (a == 1) {
return 2;
}
if (a == 2) {
return 3;
} else {
return fun1(a - 2) + fun1(a - 1);
}
}
public static double fun2(double a) { // 递归处理分母
if (a == 1) {
return 1;
}
if (a == 2) {
return 2;
} else {
return fun2(a - 2) + fun2(a - 1);
}
}
}
【程序21】
题目:求1+2!+3!+…+20!的和。
分析:累乘后累加,阶乘处理。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:求1+2!+3!+…+20!的和
*
* 程序分析:累乘。
*/
public class Demo21 {
public static void main(String[] args) {
long sum = 0;
for (int i = 1; i <= 20; i++) {
sum += fun(i);
}
System.out.println("1+2!+3!+…+20!的和:" + sum);
}
public static int fun(int a) {
int s = 1;
for (int i = a; a >= 1; a--) {
s *= a;
}
return s;
}
}
【程序22】
题目:利用递归方法求5!
分析:还是递归,理解了递归的奥妙就好处理了。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:利用递归方法求5!。
*/
public class Demo22 {
public static void main(String[] args) {
int sum = 1;
sum *= fun(5);
System.out.println(sum);
}
public static int fun(int a) {
if (a != 1) {
return a * fun(a - 1);
} else {
return 1;
}
}
}
【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁 。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
分析:还是对递归的理解和使用。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
* 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁
* 。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
*/
public class Demo23 {
public static void main(String[] args) {
System.out.println("第五个人的岁数:" + GetAge(5, 2));
}
// 递归方法求第五个人的岁数
private static int GetAge(int num, int ageMore) {
if (num == 1) {// 第一个人岁数为10
return 10;
}
return GetAge(num - 1, ageMore) + ageMore;// 每上一个人岁数加2
}
}
【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
分析:参考程序使用.charAt方法。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
*/
public class Demo24 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个不多于5的正整数");
String str = s.nextLine();
int num = str.length();
System.out.println("该数是" + num + "位数");
String newstr = "";
for (int i = str.length() - 1; i >= 0; i--) {
newstr += str.charAt(i);
}
System.out.println("逆序打印:" + "" + newstr);
}
}
【程序25】
题目:输入一个数,判断是否为回文数 如123321, 12321等。
分析:两头开始互相比较。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 输入一个数,判断是否为回文数 123321 12321
*/
public class Demo25 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个数:");
String str = s.nextLine();
boolean flag = false;
for (int i = 0, j = str.length() - 1; i < str.length() / 2; i++, j--) {
char a = str.charAt(i);
char b = str.charAt(j);
if (a == b) {
flag = true;
} else {
flag = false;
break;
}
}
System.out.println(flag);
}
}
【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样,则继续判断第二个字母。
分析:switch case 语句,参考代码以小写字母为例。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 题目:请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样,则继续判断第二个字母。
*/
public class Demo26 {
public static void main(String[] args) {
System.out.println("请输入第一个英文字母:");
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
String input2 = "";
switch (input) {
case "m":
System.out.println("Monday");
break;
case "t":
System.out.println("请输入第二个字母:");
input2 = scanner.next();
if (input2.equals("u")) {
System.out.println("Tuesday");
} else if (input2.equals("h")) {
System.out.println("Thursday");
} else {
System.out.println("你输入的字母有误!");
}
break;
case "w":
System.out.println("Wednesday");
break;
case "f":
System.out.println("Friday");
break;
case "s":
System.out.println("请输入第二个字母:");
input2 = scanner.next();
if (input2.equals("u")) {
System.out.println("Sunday");
} else if (input2.equals("a")) {
System.out.println("Saturday");
} else {
System.out.println("你输入的字母有误!");
}
break;
default:
System.out.println("你输入的字母不正确!");
break;
}
scanner.close();
}
}
【程序27】
题目:求100以内的素数。
分析:素数老生常谈了。
package com.offcn.csdn;
/**
* @author mahanyuan
* 题目:求100之内的素数
*/
public class Demo27 {
public static void main(String[] args) {
for (int i = 2; i <= 100; i++) { // 被除数
boolean flag = true;
for (int j = 2; j < i; j++) { // 除数
if (i % j == 0) {
flag = false;
break;
}
}
if (flag == true) {
System.out.println("素数有:" + i);
}
}
}
}
【程序28】
题目:对10个数进行排序。
分析:for循环,比较交换。
package com.offcn.csdn;
import java.util.Arrays;
/**
* @author mahanyuan 题目:对10个数进行排序
*/
public class Demo28 {
public static void main(String[] args) {
int[] arr = { 7, 2, 3, 1, 9, 4, 6, 5, 8, 10 }; // 给十个数
for (int j = 0; j < arr.length - 1; j++) {
int max = arr[0];
int temp = 0;
for (int i = 1; i < arr.length; i++) {
if (max > arr[i]) {
temp = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = temp;
} else {
max = arr[i];
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
【程序29】
题目:求一个3*3矩阵对角线元素之和。
1 2 3
4 5 6
7 8 9
分析:考察二维数组。
package com.offcn.csdn;
/**
* @author mahanyuan
*题目:求一个3*3矩阵对角线元素之和
* 1 2 3
* 4 5 6
* 7 8 9
*/
public class Demo29 {
public static void main(String[] args) {
int sum = 0;
int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(i == j || i + j == 2) { // 中间元素只加一遍!
sum += arr[i][j];
}
}
}
System.out.println(sum);
}
}
【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
分析:考察数组元素交换,参考程序原数组排序规律为从大到小。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
*/
public class Demo30 {
static int[] arr = { 9, 7, 6, 2, 1 };
static int[] arr2 = new int[arr.length + 1];
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = s.nextInt(); // 从键盘接一个数
// 放入新数组:
arr2[0] = num;
for (int i = 1, j = 0; i <= arr.length; i++, j++) {
arr2[i] = arr[j];
}
if (arr[0] < arr[1]) { // 正序
fun();
} else { // 倒序
fun2();
}
}
// 正序排序操作:
public static void fun() {
for (int j = 0; j < arr2.length - 1; j++) {
int max = arr2[0];
int temp = 0;
for (int i = 1; i < arr2.length; i++) {
if (max > arr2[i]) {
temp = arr2[i - 1];
arr2[i - 1] = arr2[i];
arr2[i] = temp;
} else {
max = arr2[i];
}
}
}
// 对加入新数字后的数组按原先规律操作完后输出查看
for (int i = 0; i < arr.length + 1; i++) {
System.out.print(arr2[i]+" ");
}
}
// 倒序操作
public static void fun2() {
for (int j = 0; j < arr2.length - 1; j++) {
int min = arr2[0];
int temp = 0;
for (int i = 1; i < arr2.length; i++) {
if (min < arr2[i]) {
temp = arr2[i - 1];
arr2[i - 1] = arr2[i];
arr2[i] = temp;
} else {
min = arr2[i];
}
}
}
// 对加入新数字后的数组按原先规律操作完后输出查看
for (int i = 0; i < arr.length + 1; i++) {
System.out.print(arr2[i]+" ");
}
}
}
【程序31】
题目:将一个数组逆序输出。
分析:还是考察数组元素交换。
package com.offcn.csdn;
/**
* @author mahanyuan 将一个数组逆序输出
*/
public class Demo31 {
public static void main(String[] args) {
int[] arr = { 6, 2, 4, 5, 3 };
int temp = 0;
for (int i = 0, j = arr.length - 1; i < arr.length / 2; i++, j--) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
【程序32】
题目:取一个整数a从右端开始的4~7位。
分析:将原来的整数到个序,转换后再求。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:取一个整数a从右端开始的4~7位
*/
public class Demo32 {
public static void main(String[] args) {
int a = 12345;
String str = "";
String str2 = "";
str += a;
for (int i = 0; i < str.length(); i++) {
str2 = str.charAt(i) + str2; // 将原数倒个序
}
System.out.println(str2);
for (int j = 3; j <= 6; j++) {
System.out.println("第" + (j + 1) + "位為" + str2.charAt(j));// 当
}
}
}
【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
分析:寻找规律,下面参考程序利用的规律为某行的数字值为上一行的同一列的数字值和右边一位的累加和,第一列和斜边可直接赋值为1。
package com.offcn.csdn;
/**
* @author mahanyuan
*题目:打印出杨辉三角形(要求打印出10行如下图)
*/
public class Demo33 {
public static void main(String[] args) {
int[][] arr = new int[10][10]; // 定义一个二维数组
for (int i = 0; i < 10; i++) {
for (int j = 0; j <= i; j++) {
if (i >= 2 && j > 0) {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
// 控制最左列和斜边为1
arr[i][0] = 1;
if (i == j) {
arr[i][j] = 1;
}
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
【程序34】
题目:输入3个数a,b,c,按大小顺序输出。
分析:稍微繁琐一点的数值比较。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 题目:输入3个数a,b,c,按大小顺序输出。
*/
public class Demo34 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请依次输入三个个数:");
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();
if (a > b && a > c) {
System.out.print(a + " ");
if (b > c) {
System.out.println(b + " " + c);
} else {
System.out.println(c + " " + b);
}
}
if (b > a && b > c) {
System.out.print(b + " ");
if (a > c) {
System.out.println(a + " " + c);
} else {
System.out.println(c + " " + a);
}
}
if (c > b && c > a) {
System.out.print(c + " ");
if (b > a) {
System.out.println(b + " " + a);
} else {
System.out.println(a + " " + b);
}
}
}
}
【程序35】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
分析:数组元素交换。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
*/
public class Demo35 {
public static void main(String[] args) {
int[] arr = { 5, 2, 6, 7, 3 }; // 初始化数组
boolean flag = false;
int max = arr[0], min = arr[0];
int temp = 0;
int i = 0;
for (i = 1; i < arr.length; i++) { // max
if (max > arr[i]) {
continue;
} else {
max = arr[i];
}
}
for (i = 1; i < arr.length; i++) { // min
if (min < arr[i]) {
continue;
} else {
min = arr[i];
}
}
for (int j = 0; j < arr.length; j++) { // change max
if (arr[j] == max) {
temp = arr[0];
arr[0] = arr[j];
arr[j] = temp;
}
}
for (int j = 0; j < arr.length; j++) { // change min
if (arr[j] == min) {
temp = arr[arr.length - 1];
arr[arr.length - 1] = arr[j];
arr[j] = temp;
}
}
System.out.println("max=" + max + " " + "min=" + min);
System.out.print("处理后的结果为:");
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k]);
}
}
}
【程序36】
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
分析:还是数组元素交换处理。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
*/
public class Demo36 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 }; // n = 5;
int[] arr2 = new int[5];// m = 2;各数向后移2位!
for (int i = 0; i < arr.length; i++) { // 移动操作
if (i + 2 > 4) {
arr2[i + 2 - 5] = arr[i];
} else {
arr2[i + 2] = arr[i];
}
}
for (int j = 0; j < arr2.length; j++) { // 输出移动后的数组
System.out.print(arr2[j]+" ");
}
}
}
【程序37】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
分析:数组,循环。
package com.offcn.csdn;
import java.util.Arrays;
/**
* @author mahanyuan 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
* 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
*/
public class Demo37 {
// static String str2 = "";
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 }; // n =5
int count = 0;
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
count++;
}
if (count % 3 == 0 && arr[i] != 0) {
arr[i] = 0;
}
if (i == 4) {
i = -1;
} // 4 ==arr.length -1
if (count == 12) { // count == 3 *(n-1)
break;
}
}
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + " ");
}
}
}
【程序38】
题目:写一个函数,求一个字符串的长度, 在main函数中输入字符串,并输出其长度。
分析:算实考察方法调用吧。。。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 题目:写一个函数,求一个字符串的长度, 在main函数中输入字符串,并输出其长度。
*/
public class Demo38 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = s.nextLine();
System.out.println("字符串长度为:" + fun(str));
}
public static int fun(String str) {
int length = str.length();
return length;
}
}
【程序39】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n, 当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)。
分析:注意int和double吧。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,
* 当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)
*/
public class Demo39 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = s.nextInt();
System.out.println(fun(num));
}
public static double fun(int num) {
double sum = 0;
if (num % 2 == 0) {
for (int i = 2; i <= num; i += 2) {
sum += (double) 1 / i;
}
return sum;
} else {
for (int i = 1; i <= num; i += 2) {
sum += (double) 1 / i;
}
return sum;
}
}
}
【程序40】
题目:按字符串的长度和字母ASKII顺序排序。
分析:compareTo方法的使用。
package com.offcn.csdn;
/**
* @author mahanyuan 字符串排序。
*/
public class Demo40 {
// public static void main(String[] args) {
// String tempstr;
// String[] str = { "bd", "abc", "m", "fac", "fab", "ba" };
// for (int j = 0; j < str.length; j++) {
// int min = str[j].charAt(0);
// for (int i = j + 1; i < str.length; i++) {
// if (str[i].charAt(0) < min) {
// tempstr = str[j];
// str[j] = str[i];
// str[i] = tempstr;
// min = str[j].charAt(0);
// }
// }
// }
// for (int j = 0; j < str.length; j++) {
// System.out.println(str[j]);
// }
public static void main(String[] args) {
String[] str = { "fb", "abaac", "abaa", "fc", "fa" };
for (int i = str.length - 1; i >= 1; i--) {
for (int j = 0; j <= i - 1; j++) {
if (str[j].compareTo(str[j + 1]) < 0) {
String temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
for (String subStr : str)
System.out.print(subStr + " ");
System.out.println();
}
}
}
【程序41】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份, 又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
分析:还是递归的理解和使用。
package com.offcn.csdn;
/**
* @author mahanyuan 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,
* 这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份, 又多了一个,它同样把多的一个扔入海中,
* 拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 分析:第五个猴-16个桃子
*/
public class Demo41 {
public static void main(String[] args) {
fun(5, 6);
}
public static void fun(int monkynum, int peachnum) {
if (monkynum != 0) {
fun(monkynum - 1, peachnum * 5 + 1);
System.out.println(monkynum + " " + peachnum);
} else {
System.out.println(monkynum + " " + peachnum);
}
}
}
【程序42】
题目:809*??=800*??+9*??+1 ??代表两位数;8*??的结果为两位数,9*??的结果为三位数。 求??代表的两位数,及809*??后的结果。
分析:算是数学题吧。
package com.offcn.csdn;
/**
* @author mahanyuan 809*??=800*??+9*??+1 ??代表两位数;8*??的结果为两位数,9*??的结果为三位数。
* 求??代表的两位数,及809*??后的结果
*/
public class Demo42 {
public static void main(String[] args) {
// 求??的值为:
int x;
for (x = 0;; x++) {
if (x >= 1.25 && x < 12.5 && 9 * x >= 100 && 9 * x < 1000) {
System.out.println(x);
break;
}
}
System.out.println(809 * x);
}
}
【程序43】
题目:求0-7所能组成的奇数的个数。
分析:下面参考程序为简单粗暴的for循环。
package com.offcn.csdn;
/**
* @author mahanyuan 求0-7所能组成的奇数的个数
*/
public class Demo43 {
static int[] arr = { 0, 1, 2, 3, 4, 5, 6, 7 };
public static void main(String[] args) {
long count = 0;
int I = 10000000, J = 1000000, K = 100000, M = 10000, N = 1000, X = 100, Y = 10;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
for (int k = 0; k < arr.length; k++) {
for (int m = 0; m < arr.length; m++) {
for (int n = 0; n < arr.length; n++) {
for (int x = 0; x < arr.length; x++) {
for (int y = 0; y < arr.length; y++) {
for (int z = 0; z < arr.length; z++) {
long a = arr[i] * I + arr[j] * J + arr[k] * K + arr[m] * M + arr[n] * N
+ arr[x] * X + arr[y] * Y + arr[z];
if (a % 2 == 1) {
count++;
}
}
}
}
}
}
}
}
}
System.out.println(count);
}
}
【程序44】
题目:一个偶数总能表示为两个素数之和。
分析:基本还是算考察素数。
package com.offcn.csdn;
/**
* @author mahanyuan 一个偶数总能表示为两个素数之和
*/
public class Demo44 {
public static void main(String[] args) {
int num = 20; // 一个偶数
int[] arr = new int[num];// 定义一个数组放找到的所有素数
int k = 0;// 控制数组下标
// 求num以内的所有素数:
boolean flag = true;
for (int a = 0; a <= num; a++) {
for (int i = 2; i < a; i++) {
if (a % i == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.println(a);// 打印看看有哪些是素数
arr[k] = a;
k++;// 是素数放进数组
} else {
flag = true;
}
}
System.out.println("-----------------");
// 遍历查看数组中的素数并寻找满足加和为偶数的两个素数:
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i] + arr[j] == 20 && i < j) {
System.out.println(arr[i] + " " + arr[j]);
}
}
}
}
}
【程序45】
题目:字符串连接。
分析:字符串直接通过+号连接。
package com.offcn.csdn;
public class Demo45 {
/**
* @param args 两个字符串连接程序
*/
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World!";
String str3 = str1 + str2;
System.out.println(str3);
}
}
【程序46】
题目:输入一个数(1-50),程序打印该数数量的*号。
分析:方法调用,for循环。
package com.offcn.csdn;
import java.util.Scanner;
/**
* @author mahanyuan 输入一个数(1-50),程序打印该数数量的*号(方法调用解决)
*/
public class Demo46 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个1-50的数:");
int num = s.nextInt();
fun(num);
}
public static void fun(int num) {
for (int i = 1; i <= num; i++) {
System.out.println("*----" + i);
}
}
}
【程序47】
题目:计算字符串中子串出现的次数。
分析:下面参考程序使用了charAt()方法。
package com.offcn.csdn;
/**
* @author mahanyuan 计算字符串中子串出现的次数
*/
public class Demo47 {
public static void main(String[] args) {
int count = 0;
String str = "Hello World! How are you?";
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count++;
}
}
System.out.println(count);
}
}
【程序48】
题目:输入一个整数后打印(金字塔):假如输入4打印如下:
1
121
12321
1234321
分析:找规律,注意空格即可。
package com.offcn.csdn;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner num = new Scanner(System.in);
System.out.println("请输入一个数");
int n = num.nextInt();
for (int i = 1; i <= n; i++) { // 控制行数
for (int j = n - i; j >= 0; j--) { // 控制空格
System.out.print(' ');
}
for (int k = 1; k <= i; k++) { // 控制正序
System.out.print(k);
}
for (int q = i - 1; q >= 1; q--) { // 控制倒序
System.out.print(q);
}
System.out.println();
}
}
}
【程序49】
题目:输入一个整数打印,假如输入4打印如下:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
分析:找规律,注意走S型。
package com.offcn.csdn;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner num = new Scanner(System.in);
System.out.println("请输入一个数");
int n = num.nextInt(); // 获取行数;
int x = 0, k;
for (int i = 1; i <= n; i++) { // 控制行数
if (i == 1) { // 控制第一行
for (int j = 1; j <= n; j++) {
System.out.print(j + "\t");
x = j;
}
}
if (i != 1 && i % 2 == 0) { //控制双数行
for (k = x + n; k >= x + 1; k--) {
System.out.print(k + "\t");
}
x = k + n;
}
if (i != 1 && i % 2 == 1) { //控制单数行
for (k = x + 1; k <= x + n; k++) {
System.out.print(k + "\t");
}
x = k - 1;
}
System.out.println();
}
}
}
【程序50】
题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件”stud”中。
分析:最后这题涉及文件存储,输入输出流(非本人方法)。
package com.offcn.csdn;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class Demo50 {
//定义学生模型
String[] number = new String[5];
String[] name = new String[5];
float[][] grade = new float[5][3];
float[] sum = new float[5];
public static void main(String[] args) throws Exception{
Demo50 stud = new Demo50();
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("E://java50//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();
}
}