JAVA 基础程序练习题(2)
28. 输出三角形图形
package day05;
/**
* @author TaoTianye
输出图形:
* 行数i=1 空格数=4 *的个数=1
*** 行数i=2 空格数=3 *的个数=3
***** 行数i=3 空格数=2 *的个数=5
******* 行数i=4 空格数=1 *的个数=7
********* 行数i=5 空格数=0 *的个数=9
*/
public class lianxi02 {
public static void main(String[] agre) {
for(int i=1;i<=5;i++) {
//输出空格
for(int j=1;j<=5-i;j++) {
System.out.print(" ");
}
//输出*
for(int j=1; j<=2*i-1;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
29.输出三角形图形
package day05;
/**
* @author TaoTianye
3)输出图形:
* 行数i=1 空格数j=4 *的个数k=1
* * 行数i=2 空格数j=3 *的个数k=2
* * * 行数i=3 空格数j=2 *的个数k=3
* * * * 行数i=4 空格数j=1 *的个数k=4
* * * * * 行数i=5 空格数j=0 *的个数k=5
*/
public class lianxi03 {
public static void main(String[] args) {
// 行
for (int i = 1; i <= 5; i++) {
// 空格打印
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
// *的打印
for (int j = 1; j <= i; j++) {
if (j != i) {
System.out.print("* ");
} else {
System.out.println("*");
}
}
}
}
}
30.制作九九乘法表
形如:
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
package day05;
public class lianxi04 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "X" + i + "=" + i * j + "\t");
}
System.out.println();
}
}
}
31.输出100 到 1000之间的所有素数
package day05;
/**
* @author TaoTianye
*
*输出100 到 1000之间的所有素数
*思路:1.找出100~1000的所有数
* 2.判断这些数是不是素数。
*
*/
public class lianxi05 {
public static void main(String[] args) {
//找出100~1000的所有数
for(int i=100;i<=1000;i++) {
//判断素数
for(int j=2;j<=i;j++) {
if(i%j==0) {
if(i==j) {
System.out.println(i);
}else {
break;
}
}
}
}
}
}
32.输入两个数a,n,求s=a+aa+aaa+aaaa+aa…a的值,共n个数。
例如a=2,n=5,2+22+222+2222+22222(此时共有5个数相加)。
方法一:
package day05;
import java.util.Scanner;
/**
* @author TaoTianye
*题目:输入两个数a,n,求s=a+aa+aaa+aaaa+aa...a的值,共n个数。
例如a=2,n=5,2+22+222+2222+22222(此时共有5个数相加)。
2
22=2*10+2
222=22*10+2
2222=222*10+2
*/
public class lianxi06 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个数a:");
int a = s.nextInt();
System.out.println("请输入个数n:");
int n = s.nextInt();
int sum = 0;
//次数n
int m=a;
for (int i = 1; i <= n; i++) {
sum += m;
m=m*10+a;
}
System.out.println("s=a+aa+aaa+aaaa+aa...a的值为:"+sum);
}
}
方法二:
package day05;
/**
* @author TaoTianye
*题目:输入两个数a,n,求s=a+aa+aaa+aaaa+aa...a的值,共n个数。
例如a=2,n=5,2+22+222+2222+22222(此时共有5个数相加)。
当a=9时 9 99 999 9999 99999 ......
10^1-1 10^2-1 10^3-1 10^4-1 10^5-1 ......
通项公式:f(n) =(10^n-1 )
当a=2时 2 22 222 2222 ...
(2/9)(10^1-1) (2/9)(10^2-1) (2/9)(10^3-1) (2/9)(10^4-1) ...
通项公式:f(n) =(10^n-1 )*(2/9)
*/
import java.util.Scanner;
public class lianxi07 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个数a:");
int a = s.nextInt();
System.out.println("请输入个数n:");
int n = s.nextInt();
int sum = 0;
//m表示10的次方幂 cf用于存储10^m的结果 (m=1,2,3,4……n)
int m = 1;
int cf = 1;
//通项公式:f(n) =(10^n-1 )*(a/9) 求出每一个f(1)、f(2)、f(3)、f(4)、f(5)再求和放在sum中
for (int i = 1; i <= m; i++) {
cf *= 10;
m++;
sum += (a * (cf - 1)) / 9;
if (m == (n + 1)) {
break;
}
}
System.out.println(sum);
}
}
输出:
请输入一个数a:
2
请输入个数n:
5
24690
33.产生一个1-100之间的随机数,请猜出这个数是多少。
10次机会,输入0提前结束。(数字炸弹游戏)
package day05;
import java.util.Random;
import java.util.Scanner;
/**
* @author TaoTianye
题 目:系统产生一个1-100之间的随机数,请猜出这个数是多少。
10次机会,输入0提前结束。(数字炸弹游戏)
思路:
1.系统生成 2.用户输入 3.比较 4.做其他的额外功能...
*/
public class lianxi08 {
public static void main(String[] args) {
Random random = new Random();
int b = random.nextInt(100) + 1;
System.out.println("开始游戏,已经准备好了一个1~100之间的数,结束游戏请输入0;现在请猜一个数:");
Scanner s = new Scanner(System.in);
int max = 100;
int min = 1;
int n = 9;
while (true) {
int a = s.nextInt();
if(a<min || a>max) {
System.out.println("猜的数字不合理。请猜" + min + "到" + max + "之间的数,还有" + n + "次机会");
n--;
}else if (a >= 100) {
System.out.println("猜的数字不合理。请猜" + min + "到" + max + "之间的数,还有" + n + "次机会");
} else if (a == 0) {
System.out.println("游戏结束。");
break;
} else {
if (a == b) {
System.out.println("恭喜你猜对了,游戏结束。");
break;
} else if (a > b) {
max = a;
System.out.println("猜大了,请猜" + min + "到" + max + "之间的数,还有" + n + "次机会");
} else {
min = a;
System.out.println("猜小了,请猜" + min + "到" + max + "之间的数,还有" + n + "次机会");
}
if (n == 0) {
System.out.println("次数用完,游戏结束");
break;
}
}
n--;
}
}
}
34. String a = “12 34 56 7”; 去掉字符串中的所有空格,并且倒着输出
package day05;
/**
* @author TaoTianye
String a = "12 34 56 7"; 去掉字符串中的所有空格,并且倒着输出
*/
public class lianxi10 {
public static void main(String[] args) {
String a = "12 34 56 7";
int L = a.length();
for (int i = L-1; i >=0; i--) {
char b = a.charAt(i);
if (b == ' ') {
continue;
} else {
System.out.print(b);
}
}
}
}
打印输出:7654321
35.有3个班,每班m个学生的成绩,求每个班的总分和平均分
package day05;
import java.util.Scanner;
/**
* @author TaoTianye
* 题目:有3个班,每班m个学生的成绩,求每个班的总分和平均分
*/
public class lianxi11 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int sum = 0;
double average = 0;
int n=3;
// 输入每一个班级的成绩
for (int i = 1; i <= n; i++) {
System.out.println("请输入第"+i+"班级人数m=");
int m = s.nextInt();// m表示班级里的人数
// 输入每一位学生的成绩
for (int j = 1; j <= m; j++) {
System.out.println("请输入该班级的第" + j + "个学生的成绩=");
int a = s.nextInt();// a表示个人的成绩
sum += a;
average = sum / m;
}
System.out.print("第" + n + "个班级 总分为:" + sum+"\t");
System.out.println("平均分为:" + average);
}
System.out.println();
}
}
输出:
请输入第1班级人数m=
4
请输入该班级的第1个学生的成绩=
2
请输入该班级的第2个学生的成绩=
3
请输入该班级的第3个学生的成绩=
2
请输入该班级的第4个学生的成绩=
3
第3个班级 总分为:10 平均分为:2.0
请输入第2班级人数m=
4
请输入该班级的第1个学生的成绩=
2
请输入该班级的第2个学生的成绩=
4
请输入该班级的第3个学生的成绩=
2
请输入该班级的第4个学生的成绩=
4
第3个班级 总分为:22 平均分为:5.0
请输入第3班级人数m=
5
请输入该班级的第1个学生的成绩=
3
请输入该班级的第2个学生的成绩=
4
请输入该班级的第3个学生的成绩=
2
请输入该班级的第4个学生的成绩=
4
请输入该班级的第5个学生的成绩=
3
第3个班级 总分为:38 平均分为:7.0
36. 题目:输入按照如下案例输入一个数n,并输出三角形。
输入:5
输出:
1
22
333
4444
55555
package day05;
import java.util.Scanner;
/**
* @author TaoTianye
*
题目:输入按照如下案例输入一个数n,并输出三角形。
输入:5
输出:
1
22
333
4444
55555
*
*/
public class lianxi13 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
// i表示行数
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i);
}
System.out.println();
}
}
}
37. 输入按照如下案例输入一个数n,并输出三角形。 输入:5
输出:
54321
5432
543
54
5
package day05;
import java.util.Scanner;
/**
* @author TaoTianye
* 题目:5.输入按照如下案例输入一个数n,并输出三角形。
* 输入:5
* 输出:
* 54321
* 5432
* 543
* 54
* 5
*
*/
public class lianxi14 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
for (int i = 0; i < n; i++) {
for(int j=n;j>i;j--) {
System.out.print(j);
}
System.out.println();
}
}
}
38.输入一批整数,使用循环求出最大值与最小值,输入0时结束。
package day05;
import java.util.Scanner;
/**
* @author TaoTianye
* 6.输入一批整数,使用循环求出最大值与最小值,输入0时结束。
*
*/
public class lianxi15 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int max = 0;//预先定义一个max
int min = 0;//预先定义一个min
boolean flage=true;
for (;;) {
int a = s.nextInt();
if(a==0) {
break;
}
if(flage) {
max = a;
min = a;
flage= false;
}
if(a>max) {
max=a;
}
if(a<min) {
min=a;
}
}
System.out.println(max);
System.out.println(min);
}
}
打印输出:
2 3 4 12 1 1 3 3 30
0
30
1
39.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐。
方案一:数学思维
package day05;
/**
* @author TaoTianye 7.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐。
*
* 思路整理:
* 1、预先定义:max=0 最多喝到max瓶;
* 2、分析: 瓶数 剩余的钱
* 第一轮 20/3=6 20%3=2 余 2
* 第二轮 (6+2)/3=2 (6+2)%3=2 余2
* 第三轮 (2+2)/3=1 (2+2)%3=1 余1
* 第四轮 (1+1)/3=0 (1+1)%3=2 余2
* 规律: (取整之后的数+取余的余数)/3= 此轮的瓶数
*
*/
public class lianxi16 {
public static void main(String[] args) {
int max = 0;
int a = 20;
for (;;) {
int x = a / 3;
int y = a % 3;
a = x + y;
if (x == 0) {
break;
}
max=max+x;
}
System.out.println("最多可以喝到 "+max+" 瓶可乐");
}
}
打印输出:
最多可以喝到 9 瓶可乐
方案二:编程思维
package day05;
/**
* @author TaoTianye
题目:给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,
问最多可以喝到多少瓶可乐。
*/
public class caogao {
public static void main(String[] args) {
int money = 20; //钱数
int sum = 0; //瓶数
while (money >= 3) {
sum++;
money -= 2;
}
System.out.println(sum);
}
}
40. 题目:编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转,
“To be or not to be",将变成"oT eb ro ton ot eb."。
package day05;
/**
* @author TaoTianye
题目:编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转,
“To be or not to be",将变成"oT eb ro ton ot eb."。
*/
public class lianxi17 {
public static void main(String[] args) {
String str = "To be or not to be";
String result = ""; // 最终的结果字符串
String temp = ""; // 中间临时字符串
for(int i = 0;i < str.length();i ++) {
//如果字符不为空格,就加到临时字符串中(往前加)
if(str.charAt(i) != ' ') {
temp = str.charAt(i) + temp;
}else {
//如果字符为空格,就把temp临时字符串存入result结果字符串,并加空格
result += temp + ' ';
//将temp临时字符串置为空,方便下一次加入新单词
temp = "";
}
//如果是最后一个字符,也需要将它存入result结果字符串
if(i == str.length() - 1) {
result = result + temp + ".";
}
}
System.out.println(result);
}
}
41.翻转一个字符串
package day05;
//题目:翻转一个字符串
public class lianxi18 {
public static void main(String[] args) {
String s = "abcdefg";
int L=s.length();
for (int j = L - 1; j >= 0; j--) {
char b = s.charAt(j);
System.out.print(b);
}
}
}
42. 题目:1.输入一个数n,输出三角形。例如:
输入:n=4
1
121
12321
1234321
package week2day01;
import java.util.Scanner;
/**
* @author TaoTianye
题目:1.输入一个数n,输出三角形。例如:
输入:n=4
1
121
12321
1234321
思路:1、先输出 1 行 k=1 数字:1 空格数:3
12 k=2 12 2
123 k=3 123 1
1234 k=4 1234 0
2、在输出
空格
1
21
321
*/
public class lianxi01 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
for (int k = 1; k <= n; k++) {
for (int i = n - k; i > 0; i--) {
System.out.print(" ");
}
for (int j = 1; j <= k; j++) {
System.out.print(j);
}
for (int x = k - 1; x > 0; x--) {
if (k==1) {
System.out.print(" ");
}else {
System.out.print(x);
}
}
System.out.println();
}
}
}
43输入一个数n,输出正方形。例如:
输入:n=4
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
package week2day01;
import java.util.Scanner;
/**
* @author TaoTianye
2.输入一个数n,输出正方形。例如:
输入:n=4
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
*/
public class lianxi02 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
for (int i = 1; i <= n; i++) {
if (i % 2 != 0) {
for (int j = (i - 1) * n+1; j <= i * n; j++) {
System.out.print(j + " ");
}
} else {
for (int j = i * n; j >= (i - 1) * n+1; j--) {
System.out.print(j + " ");
}
}
System.out.println();
}
}
}
44.找出一组数据中的最大值与最小值 (使用数组)
package week2day01;
public class lianxi04 {
public static void main(String[] args) {
int[] a= {1,2,4,-1,2,3,56,78,99};
int max=a[0];
int min=a[0];
for(int i=1;i<a.length;i++) {
if(a[i]>max) {
max=a[i];
}
if (a[i]<min){
min=a[i];
}
}
System.out.println("最大值="+max);
System.out.println("最小值="+min);
}
}
45.去参加青年歌手大奖赛,有10个评委打分,(去掉一个最高一个最低)求平均分? 使用数组
package week2day01;
import java.util.Scanner;
/**
* @author TaoTianye
题目:去参加青年歌手大奖赛,有10个评委打分,(去掉一个最高一个最低)求平均分?
运用数组
*/
public class lianxi05 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//输入数组
int[] a= new int[10];
for(int i=0;i<10;i++) {
int b=s.nextInt();
a[i]=b;
}
//比较出最大值和最小值,并求出总和
int max=a[0];
int min=a[0];
double sum=0.0;
for(int i=0;i<a.length;i++) {
if(a[i]>max) {
max=a[i];
}
if (a[i]<min){
min=a[i];
}
sum +=a[i];
}
System.out.println("最高分="+max);
System.out.println("最低分="+min);
System.out.println("平均分="+(sum+a[0]-max-min)/8);
}
}
输入:9 7 8 6 4 5 1 4 5 7 9 0
输出:最高分=9
最低分=1
平均分=6.875
注意:在输入数据时,采用空格来分隔,因为程序里只要求10个数,无论输入多少数据,值识别钱10 个
46.题目:可以定义两个数组,一个数组a存放[A,2,3,4,5,6,7,8,9,10,J,Q,K],另一个数组b存放[♠,♥,♣,♦ ]
输出:
♠A ♠2 ♠3 ♠4 ♠5 ♠6 ♠7 ♠8 ♠9 ♠10 ♠J ♠Q ♠K
♥A ♥2 ♥3 ♥4 ♥5 ♥6 ♥7 ♥8 ♥9 ♥10 ♥J ♥Q ♥K
♣A ♣2 ♣3 ♣4 ♣5 ♣6 ♣7 ♣8 ♣9 ♣10 ♣J ♣Q ♣K
♦A ♦2 ♦3 ♦4 ♦5 ♦6 ♦7 ♦8 ♦9 ♦10 ♦J ♦Q ♦K
package week2day01;
/**
* @author TaoTianye
题目:可以定义两个数组,一个数组a存放[A,2,3,4,5,6,7,8,9,10,J,Q,K],另一个数组b存放[♠,♥,♣,♦ ]
输出:
♠A ♠2 ♠3 ♠4 ♠5 ♠6 ♠7 ♠8 ♠9 ♠10 ♠J ♠Q ♠K
♥A ♥2 ♥3 ♥4 ♥5 ♥6 ♥7 ♥8 ♥9 ♥10 ♥J ♥Q ♥K
♣A ♣2 ♣3 ♣4 ♣5 ♣6 ♣7 ♣8 ♣9 ♣10 ♣J ♣Q ♣K
♦A ♦2 ♦3 ♦4 ♦5 ♦6 ♦7 ♦8 ♦9 ♦10 ♦J ♦Q ♦K
*/
public class lianxi06 {
public static void main(String[] args) {
String[] a = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] b = {"♠","♥","♣","♦" };
for(int i=0;i<b.length;i++) {
for(int j=0;j<a.length;j++) {
System.out.print(b[i]+a[j]+" ");
}
System.out.println();
}
}
}
47.键盘录入一个字符串,用数组统计各个字母出现的次数:
例如: str = “helloujiuyehelloworldhellojava”;
结果:字母–个数
a–2 b–0 c–0 d–1
e–4 f–0 g–0 h–3
i–1 j–2 k–0 l–7
m–0 n–0 o–4 p–0
q=0 r–1 s–0 t–0
u–2 v–1 w–1 x–0
y–1 z–0
提示:
① 将字符串转换为char类型的数组char[] ch = str.toCharArray();
② 每个字符对应的ASCII码值可以当作ch数组的下标进行累加。
int[] c=…
c[0] ----’a’的个数
c[1] ----’b’的个数
package week2day01;
import java.util.Scanner;
/**
* @author TaoTianye
需求实现
键盘录入一个字符串,用数组统计各个字母出现的次数:
例如: str = “helloujiuyehelloworldhellojava”;
结果:字母--个数
a--2 b--0 c--0 d--1
e--4 f--0 g--0 h--3
i--1 j--2 k--0 l--7
m--0 n--0 o--4 p--0
q=0 r--1 s--0 t--0
u--2 v--1 w--1 x--0
y--1 z--0
提示:
① 将字符串转换为char类型的数组char[] ch = str.toCharArray();
② 每个字符对应的ASCII码值可以当作ch数组的下标进行累加。
int[] c=........
c[0] ----’a’的个数
c[1] ----’b’的个数
*/
public class lianxi07 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String str = s.nextLine();
char[] ch = str.toCharArray();
int[] a = new int[26];// a[0]表示字母a出现的个数 a[1]表示字母b出现的个数
for (int i = 0; i < ch.length; i++) {
for (int j = 0; j < a.length; j++) {
if (ch[i] - 97 == j) {
a[j]++;
}
}
}
char[] b=new char[26];
for (int i = 0; i < a.length; i++) {
b[i]=(char)(i+97);
System.out.println("字母"+b[i]+"的个数为:"+a[i]);
}
}
}
结果:
输入:helloujiuyehelloworldhellojava
输出:
字母a的个数为:2
字母b的个数为:0
字母c的个数为:0
字母d的个数为:1
字母e的个数为:4
字母f的个数为:0
字母g的个数为:0
字母h的个数为:3
字母i的个数为:1
字母j的个数为:2
字母k的个数为:0
字母l的个数为:7
字母m的个数为:0
字母n的个数为:0
字母o的个数为:4
字母p的个数为:0
字母q的个数为:0
字母r的个数为:1
字母s的个数为:0
字母t的个数为:0
字母u的个数为:2
字母v的个数为:1
字母w的个数为:1
字母x的个数为:0
字母y的个数为:1
字母z的个数为:0