1、題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
思路:微笑刚开始真的无从下手,这么难的,怎么可以说是基础呢,感觉这些应该是逻辑分析很强的,第一个月只有一对兔子,第二个月还是只有一对兔子,第三个月,就有两对了,第四个月3对,第五个月5对,第六个月8对,第七个月是13对。。。。。。规律出来了,你们发了没?
public class TestDay01 {
public static void main(String[] args) {
/**
* 规律是每个数字都是前面两个数字之和
* i是表示月份,这里计算了36个月,也就是三年,兔子的数量
*/
int i;
long arr[] = new long[36]; //这个数组时用来计算每月有兔子的对数
arr[0] = arr[1] = 1;
System.out.println("第1个月兔子1对" + "," + "总数是" + 2);
System.out.println("第2个月兔子1对" + "," + "总数是" + 2);
for (i = 2; i < 35; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
System.out.println("第" + i + "个月有兔子" + arr[i] + "对" + "," + "总数是" + 2 * arr[i]);
}
}
}
2、题目:判断101-200之间有多少个素数,并输出所有素数。
思路:素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。
public class TestDay02 {
public static void main(String[] args) {
int i, j, n, m, x; //n是用来存储余数的、m是用来统计具体一个数的因子、x是用来统计101~200直接素数的个数
n = 0;
m = 0;
x = 0;
for (i = 101; i < 200; i++) { //两重循环
for (j = 1; j <= i; j++) {
n = i % j; //去余数,如果余数为零,就是该数的因子
if (n == 0) { //统计某数有多少个因子
m = m + 1;
}
}
if (m == 2) { //如果某数的因子只有两个,那它就一定是素数,那这个数就应该输出
System.out.println(i + " ");
x = x + 1;
}
m = 0; //清零,不清了会继续累加
}
System.out.println();
System.out.println("在101~200之间一共有素数:" + x + "个");
}
}
3、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
第一种:
public class TestDay03 {
public static void main(String[] args) {
/**
* java的运算符,立方要这样写,写成i^3这样,竟然运算不出来
* 如果遇到高次的话可以使用循环算出来
*/
int a, sum; //表示100~999
int i, j, k; //分别表示百位、十位、各位
for (a = 100; a <= 999; a++) {
i = a / 100;
j = (a - i * 100) / 10;
k = a - i * 100 - j * 10;
sum = i * i * i + j * j * j + k * k * k;
if (sum == a) {
System.out.println(sum);
}
}
}
}
第二种:
public class TestDay03 {
public static void main(String[] args) {
int sum;
int i,j,k; //分别表示百位、十位、各位
for (i = 1; i <=9 ; i++) {
for (j = 0; j <=9 ; j++) {
for (k = 0; k <=9 ; k++) {
sum = i * i * i + j * j * j + k * k * k;
if (i*100+j*10+k==sum){
System.out.println(sum);
}
}
}
}
}
}
4、题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public class TestDay04 {
public static void main(String[] args) {
int x;
Scanner scanner = new Scanner(System.in); //定义从键盘输入
System.out.println("请输出一个整数:"); //提示
x = scanner.nextInt(); //将从键盘输入的数赋值给x
new PrimeSplit(x);
}
private static class PrimeSplit {
int k = 2; //将最小的质数赋值给K
public PrimeSplit(int x) { //小于等于1的数不可以分解
if (x <= 1) {
System.out.println(x + "是无效的被分解数");
} else if (x == 2) {
System.out.println(x + "分解后的质数为:1*" + x); //如果输入的是最小质数2
} else {
System.out.println(x + "分解后的质数为:1"); //1是所有的整数的质数
while (k <= x) { //输入的数可以被K整除
if (x % k == 0) {
System.out.println("*" + k); //将k添加到结果中
x = x / k; //除以最小质数后重新循环
} else {
k++;
}
}
}
}
}
}
5、题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
public class TestDay05 {
public static void main(String[] args) {
int score = 90; //分数的值可以随便修改
if (score >= 90) {
System.out.println("A");
} else if (score >= 60) {
System.out.println("B");
} else {
System.out.println("C");
}
}
}
6、题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
public class TestDay06 {
public static void main(String[] args) {
gcdlcm gcdlcm = new gcdlcm();
System.out.println("两个数的最大公约数是:" + gcdlcm.gcd(10, 16));
System.out.println("两个数的最小公约数是:" + gcdlcm.lcm(10, 16));
}
private static class gcdlcm {
int gcd(int m, int n) {
if (m < n) { //这个判断是为了将大数放在前面
int temp = n;
n = m;
m = temp;
}
if (m % n == 0) {
return n;
} else {
m %= n;
return gcd(m, n); //这里也可以成gcd(n,m),就省掉了前面的判断了,会快一点
}
}
int lcm(int m, int n) {
int i = 1;
if (m < n) { //这个判断是为了将大数放在前面
int temp = n;
n = m;
m = temp;
}
int lcm = m;
while (lcm % n != 0) {
lcm = m * i;
i++;
}
return lcm;
}
}
}
7、题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
public class TestDay07 {
public static void main(String[] args) {
int abcCount = 0; //英文字母个数
int spaceCount = 0; //空格键个数
int numCount = 0; //数字个数
int otherCount = 0; //其他字符个数
Scanner scanner = new Scanner(System.in);
System.out.println("请输出:"); //提示
String str = scanner.nextLine();
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
if (Character.isLetter(ch[i])) {
//判断是否字母
abcCount++;
} else if (Character.isDigit(ch[i])) {
//判断是否数字
numCount++;
} else if (Character.isSpaceChar(ch[i])) {
//判断是否空格
spaceCount++;
} else {
//以上都不是则认为是其他字符
otherCount++;
}
}
System.out.println("字母个数:" + abcCount);
System.out.println("数字个数:" + numCount);
System.out.println("空格个数:" + spaceCount);
System.out.println("其他字符个数:" + otherCount);
}
}
8、题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
public class TestDay08 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num = 0, num1 = 0, num2 = 0, temp = 0;
System.out.println("请输出数字:");
num1 = input.nextInt();
num = num1;
temp = num1;
System.out.println("请输入项数:");
num2 = input.nextInt();
for (int i = 0; i < num2; i++) {
num = (num * 10 + num1);
temp += num;
}
System.out.println(temp);
}
}
9、题目:一个数如果恰好等于它的因子之和, 这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
分析:没啥特别好分析的,注意类名尽量不要学我用拼音取名吧23333。
/**
*题目:一个数如果恰好等于它的因子之和, 这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
*/
public class TestDay09 {
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米)。
/**
* 一球从h米高度自由落下,每次落地后反跳回原高度的一半;
*再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
*/
public class TestDay10 {
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循环嵌套。
/**
*题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
public class TestDay11 {
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。
/**
*企业发放的奖金根据利润提成。利润(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 TestDay12 {
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循环嵌套。
/**
*题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
public class TestDay13 {
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、题目:输入某年某月某日,判断这一天是这一年的第几天?
分析:注意平年和闰年。
/**
*输入某年某月某日,判断这一天是这一年的第几天?
*/
public class TestDay14 {
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的一个现成方法直接进行从小到大排序,算是偷懒了。。。
/**
*题目:输入三个整数x,y,z,请把这三个数由小到大输出。
*/
public class TestDay15 {
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"(制表符)使得输出好看些。
/**
*输出9*9口诀
*/
public class TestDay16 {
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天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。
分析:利用递归。
/**
*题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
* 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
* 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。
*/
public abstract class TestDay17 {
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比了
public class TestDay18 {
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、题目:打印菱形。
分析:程序以”*“为例打印,找空格和星号之间的规律联系。
/**
*题目:打印出如下图案(菱形):
* 3个空格1个*
*** 2个空格3个*
***** 1个空格5个*
******* 0个空格7个* 中间最长必为奇数
***** 1个空格5个*
*** 2个空格3个*
* 3个空格1个*
*/
public class TestDay19 {
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项之和。
分析:抓住分子与分母的变化规律后累加即可,下面参考代码中还用了递归处理。
/**
*题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13… 求出这个数列的前20项之和。
*
* 程序分析:请抓住分子与分母的变化规律。分数:fraction
*/
public class TestDay20 {
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!的和。
分析:累乘后累加,阶乘处理。
/**
*题目:求1+2!+3!+…+20!的和
*
* 程序分析:累乘。
*/
public class TestDay21 {
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!
分析:还是递归,理解了递归的奥妙就好处理了。
/**
*题目:利用递归方法求5!。
*/
public class TestDay22 {
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岁。请问第五个人多大?
分析:还是对递归的理解和使用。
/**
*题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
* 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁
* 。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
*/
public class TestDay23 {
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方法。
/**
*给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
*/
public class TestDay24 {
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、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
题目:输入一个数,判断是否为回文数 如123321, 12321等。
分析:两头开始互相比较。
/**
*输入一个数,判断是否为回文数 123321 12321
*/
public class TestDay25 {
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 语句,参考代码以小写字母为例。
/**
*题目:请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样,则继续判断第二个字母。
*/
public class TestDay26 {
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以内的素数。
分析:素数老生常谈了。
/**
* 题目:求100之内的素数
*/
public class TestDay27 {
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循环,比较交换。
/**
*题目:对10个数进行排序
*/
public class TestDay28 {
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
分析:考察二维数组。
/**
*题目:求一个3*3矩阵对角线元素之和
* 1 2 3
* 4 5 6
* 7 8 9
*/
public class TestDay29 {
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、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
分析:考察数组元素交换,参考程序原数组排序规律为从大到小。
/**
*有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
*/
public class TestDay30 {
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、题目:将一个数组逆序输出。
分析:还是考察数组元素交换。
/**
* 将一个数组逆序输出
*/
public class TestDay31 {
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位。
分析:将原来的整数到个序,转换后再求。
public class TestDay32 {
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
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*/
public class TestDay33 {
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];
}
arr[i][0] = 1; //控制最左列和斜边为1
if (i == j) {
arr[i][j] = 1;
}
System.out.println(arr[i][j] + " ");
}
System.out.println();
}
}
}
34、题目:输入3个数a,b,c,按大小顺序输出。
分析:稍微繁琐一点的数值比较。
import java.util.Scanner;
public class TestDay34 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请依次请输入三个个数:");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
if (a > b && a > c) {
System.out.println(a + " ");
if (b > c) {
System.out.println(b + " " + c);
} else {
System.out.println(c + " " + b);
}
}
if (b > a && b > c) {
System.out.println(b + " ");
if (a > c) {
System.out.println(a + " " + c);
} else {
System.out.println(c + " " + a);
}
}
if (c > b && c > a) {
System.out.println(c + " ");
if (b > a) {
System.out.println(b + " " + a);
} else {
System.out.println(a + " " + b);
}
}
}
}
35、题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
分析:数组元素交换。
public class TestDay35 {
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.println("处理后的结果为:");
for (int k = 0; k < arr.length; k++) {
System.out.println(arr[k]);
}
}
}
36、题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
分析:还是数组元素交换处理。
public class TestDay36 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int[] arr2 = new int[5];
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.println(arr2[j] + " ");
}
}
}
37、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
分析:数组,循环。
public class TestDay37 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 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;
}
if (count == 12) {
break;
}
}
for (int j = 0; j < arr.length; j++) {
System.out.println(arr[j] + " ");
}
}
}
38、题目:写一个函数,求一个字符串的长度, 在main函数中输入字符串,并输出其长度。
分析:算实考察方法调用吧。。。
public class TestDay38 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = scanner.nextLine();
System.out.println("字符串长度为:" + fun(str));
}
private 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吧。
public class TestDay39 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = scanner.nextInt();
System.out.println(fun(num));
}
private 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方法的使用。
public class TestDay40 {
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.println(subStr + " ");
System.out.println();
}
}
}
41、题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个, 这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份, 又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
分析:还是递归的理解和使用。
public class TestDay41 {
public static void main(String[] args) {
fun(5, 6);
}
private 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??后的结果。
分析:算是数学题吧。
public class TestDay42 {
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循环
public class TestDay43 {
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、题目:一个偶数总能表示为两个素数之和。
分析:基本还是算考察素数。
public class TestDay44 {
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++) {
System.out.println(arr[i] + " " + arr[j]);
}
}
}
}
45、题目:字符串连接。
分析:字符串直接通过+号连接。
public class TestDay45 {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
String s3 = s1 + s2;
System.out.println(s3);
}
}
46、题目:输入一个数(1-50),程序打印该数数量的*号。
分析:方法调用,for循环。
public class TestDay46 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个1-50的数:");
int num = scanner.nextInt();
fun(num);
}
private static void fun(int num) {
for (int i = 1; i <= num; i++) {
System.out.println("*----" + i);
}
}
}
47、题目:计算字符串中子串出现的次数。
分析:下面参考程序使用了charAt()方法。
public class TestDay47 {
public static void main(String[] args) {
int count = 0;
String string = "Hello World! How are you?";
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i) == ' ') {
count++;
}
}
System.out.println(count);
}
}
48、题目:输入一个整数后打印(金字塔):假如输入4打印如下:
1
121
12321
1234321
分析:找规律,注意空格即可。
public class TestDay48 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt();
for (int i = 1; i < n; i++) { //控制行数
for (int j = n - i; j >= 0; j--) { //控制空格
System.out.println(' ');
}
for (int k = 1; k <= 1; k++) { //控制正序
System.out.println(k);
}
for (int q = i - 1; q >= 1; q--) { //控制倒序
System.out.println(q);
}
System.out.println();
}
}
}
49、题目:输入一个整数打印,假如输入4打印如下:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
分析:找规律,注意走S型。
public class TestDay49 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt(); //获取行数
int x = 0, k;
for (int i = 0; i < n; i++) { //控制行数
if (i == 1) { //控制第一行
for (int j = 1; j <= n; j++) {
System.out.println(j + "\t");
x = j;
}
}
if (i != 1 && i % 2 == 0) { //控制双数行
for (k = x + n; k >= x + 1; k--) {
System.out.println(k + "\t");
}
x = k + n;
}
if (i != 1 && i % 2 == 1) { //控制单数行
for (k = x + 1; k <= x + n; k++) {
System.out.println(k + "\t");
}
x = k - 1;
}
System.out.println();
}
}
}
50、题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
public class TestDay50 {
//定义学生模型
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 IOException {
TestDay50 stud = new TestDay50();
stud.input();
stud.output();
}
private 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.println("请输入学号:");
number[i] = br.readLine();
System.out.println("请输入名字:");
name[i] = br.readLine();
for (int j = 0; j < 3; j++) {
System.out.println("请输入第" + (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("请输入一个数字:");
}
}
}
/**
* 输出文件
*/
private void output() throws IOException {
FileWriter fw = new FileWriter("D://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();
}
}
}
版权归原作者 睿图方永 所有, 如有侵权,请联系我们删除。