1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
import java.sql.SQLOutput;
import java.util.Scanner;
/**
* 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
* 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*
* 解题思路:1月--1对 2月--1对 3月--2对 4月--3对 5月--5对 6月--8对 7月--13对
* 由此可得规律从第三月开始,数量都是前两个月的和,即3月等于1月加2月
* 4月等于3月加2月 5月等于4月加3月 .......
*/
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象来接收键盘输入的数据
System.out.println("请输入你要计算的月数:");
int num = scanner.nextInt(); // 将键盘输入的信息扫描为int
if (num == 1) { // 如果为1月的时候 直接打印出
System.out.println(num + "月的兔子是" + num + "对" + "," + "总数是" + num * 2);
return;
} else if (num == 2) { // 如果为2月的时候 直接打印出
System.out.println(num + "月的兔子是" + (num - 1) + "对" + "," + "总数是" + (num - 1) * 2);
return;
}
int[] list = new int[num]; // 定义一个动态的数组,用来存储
list[0] = list[1] = 1; // 因为1月和2月都是1对 所以直接赋值1
for (int i = 2; i < num; i++) { // 从2开始遍历 也就是3月开始遍历添加
list[i] = list[i - 1] + list[i - 2]; // 从上方解题思路可得的计算
System.out.println((i + 1) + "月的兔子是" + list[i] + "对" + "," + "总数是" + 2 * list[i]);
}
}
}
以下为打印结果:
请输入你要计算的月数:
12
3月的兔子是2对,总数是4
4月的兔子是3对,总数是6
5月的兔子是5对,总数是10
6月的兔子是8对,总数是16
7月的兔子是13对,总数是26
8月的兔子是21对,总数是42
9月的兔子是34对,总数是68
10月的兔子是55对,总数是110
11月的兔子是89对,总数是178
12月的兔子是144对,总数是288
2.判断101-200之间有多少个素数,并输出所有素数。
/**
* 判断101-200之间有多少个素数,并输出所有素数。
*
* 解题思路:素数又叫质数,就是除了1和它本身之外没有整数能被它整除的数。
* 先定义一个for循环遍历101 - 200 然后再定义for循环用来做除数
* 判断i 能不能整除 j
*/
public class Test02 {
public static void main(String[] args) {
int num = 0; // 用来累加素数个数
for (int i = 101; i < 200; i++) {
boolean b = false;
for (int j = 2; j < i; j++) {
if ( i % j == 0) { // 如果为true 即i能整除j
b = false; // b的值还是false
break; // 到这里结束当前i的循环
} else { // 如果不能整除
b = true; // 重新赋值为true
}
}
if (b) { // 当b为true时
num++; // 素数个数加1
System.out.println(i+ "\t"); // 打印当前i 即素数
}
}
System.out.println(num); // 打印素数的总数
}
}
打印结果:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 素数的总数是:21
3.打印出100–999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
package com.company.practice;
/**
* 打印出100--999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
* 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
*/
public class Test03 {
public static void main(String[] args) {
for (int i = 100; i <= 999; i++) {
int a = i / 100; // 拿出当前数的百位
int b = (i - a * 100) / 10; // 拿出当前数的十位
int c = i - a * 100 - b * 10; // 拿出当前数的个位
int sum = a * a * a + b * b * b + c * c * c; // 计算百位 十位 个位 的立方和
if (sum == i) { // 如果sum等于i
System.out.println(sum); // 打印出100 -- 999 的所有水仙花数
}
}
}
}
打印结果:
153
370
371
407
4.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
package com.company.practice;
import java.util.Scanner;
/**
* 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
*
* 解题思路:先将字符串转换为一个字符串数组,然后遍历判断
*/
public class Test04 {
public static void main(String[] args) {
int english = 0; // 文字母个数
int space = 0; // 空格键个数
int num = 0; // 数字个数
int other = 0; // 其他字符个数
Scanner scanner = new Scanner(System.in); // 创建Scanner对象来接收键盘输入的数据
System.out.println("请输入任意字符:");
String str = scanner.nextLine(); // nextLine()方法返回的是输入回车之前的所有字符。
char[] chars = str.toCharArray(); // 将字符串对象中的字符转换为一个字符数组
for (int i = 0; i < chars.length; i++) {
if (Character.isLowerCase(chars[i])){ // 遍历判断数组中的对应下标元素是否为字母
english++;
} else if (Character.isDigit(chars[i])) { // 遍历判断数组中的对应下标元素是否为数字
num++;
} else if (Character.isSpaceChar(chars[i])) { // 遍历判断数组中的对应下标元素是否为空格
space++;
} else { // 即如果以上都不是 归纳为其他字符
other++;
}
}
// 最后打印所有的字符个数
System.out.println("字母的个数:" + english);
System.out.println("空格的个数:" + space);
System.out.println("数字的个数:" + num);
System.out.println("其他字符的个数:" + other);
}
}
打印结果:
请输入任意字符:
jksjo3i2 o'ipsoi2 [ ]o o ]2o so 4 ] o]4o44498889 783 o]o]oio ]]lks.k [k; j['
字母的个数:30
空格的个数:15
数字的个数:17
其他字符的个数:15
5.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加), 几个数相加由键盘控制
package com.company.practice;
import java.util.Scanner;
/**
* 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
* 几个数相加由键盘控制
*/
public class Test05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要加的数:");
int addNum = scanner.nextInt();
System.out.println("请输入要想加的次数:");
int count = scanner.nextInt();
int sum = 0; // 累计值
int step = 0; // 每次加后的数值
for (int i = 1; i <= count; i++) {
step = step * 10 + addNum; // 每加一次的值
sum += step; // 累加的值
System.out.println(sum);
}
}
}
打印结果:
请输入要加的数:
2
请输入要想加的次数:
5
2
24
246
2468
24690
6.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数
package com.company.practice;
/**
* 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完
* 数。
*/
public class Test06 {
public static void main(String[] args) {
for (int i = 2; i < 1000; i++) {
int sum = 0;
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0) { // 找因子 如果i整除j 即就用j去相加
sum += j; // 比方说i为6 那么j就为1 -- i/2(3)
}
}
if (sum == i) { // 如果所有的j相加等于i 即所有的因子(除本身)
System.out.println(i);
}
}
}
}
打印结果:
6
28
496
7.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
package com.company.practice;
/**
* 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多
* 少米?第10次反弹多高?
*/
public class Test07 {
public static void main(String[] args) {
double sum = 0; // 用来累加
double height = 100; // 定义原始的高度100 然后累计减去
for (int i = 2; i <= 10; i++) {
height = height / 2; // 得出每次落下后弹回的高度
sum += height * 2; // 累计每次抛下后弹回的每次来回经过长度所以乘2
}
System.out.println(height / 2); // 打印经过是十次后的高度
System.out.println(sum + 100); // 经过长度 记得是经过9次弹回的来回长度加上第一次落地经过的100
}
}
打印结果:
0.09765625
299.609375
8.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
package com.company.practice;
/**
* 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
public class Test08 {
public static void main(String[] args) {
int a = 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.print(i + "" + j + "" + k + "");
System.out.print("\t");
a++; // 每次组成一次且没重复时加1
}
}
}
System.out.println();
}
System.out.println(a);
}
}
打印结果:
123 124 132 134 142 143
213 214 231 234 241 243
312 314 321 324 341 342
412 413 421 423 431 432
24
9.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
package com.company.practice;
/**
* 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*/
public class Test10 {
public static void main(String[] args) {
for (int i = 1; i < 10000; i++){ // 例如计算10000以内
for (int j = 1; j < 1000; j++){
if (j * j == i + 100) { // 判断当加上100相等时再进行以下循环
for (int k = 1; k < 1000; k++){
if (k * k == i + 100 + 168){ // 当以上都符合是再打印
System.out.println(i);
}
}
}
}
}
}
}
打印结果:
21
261
1581
10.输入某年某月某日,判断这一天是这一年的第几天?
package com.company.practice;
import java.util.Scanner;
/**
* 输入某年某月某日,判断这一天是这一年的第几天?
*/
public class Test11 {
public static void main(String[] args) {
int[] list = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 先将一年的月份日子定下来
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入月份:");
int month = scanner1.nextInt();
Scanner scanner2 = new Scanner(System.in);
System.out.println("请输入日期:");
int date = scanner2.nextInt();
if (month < 1 || month > 12){ // 当输入的月份不合法时
System.out.println("你输入的格式不合法!!!!");
return;
}
int sum = 0; // 计数
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){ // 判断是否时闰年,因为闰年的2月有29天
list[2] = 29; // 即为润年的时候,2月重新赋值为29天
if (month == 2){ // 判断如果你输入的为2月时,输入的天数不能超出29天 不能低于1天
if (date > 29 || date < 1) {
System.out.println("你输入的不合法!!!");
return;
}
}
}else { // 当不为闰年的时候
if (month == 2){
if (date > 28 || date < 1){ // 判断如果你输入的为2月时,输入的天数不能超出28天 不能低于1天
System.out.println("你输入的不合法!!!");
return;
}
}
}
// 判断如果输入的为有31天的月份的时候,不能大于31天 小于1天
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
if (date > 31 || date < 1){
System.out.println("你输入的不合法!!!");
return;
}
}else { // 或者就为只有30天的月份 不能大于30天 小于1天
if (date > 30 || date < 1){
System.out.println("你输入的不合法!!!");
return;
}
}
for (int i = 1; i < month; i++){ // 因为输入的月份为不能确定是不是数组里的满月
sum = sum + list[i]; // 所以要遍历输入月份少一,然后再去加上输入的天数
}
int num = sum + date; // 即为输入的月份 -1 遍历相加再加上输入的天数
System.out.println("这是" + year + "年的第" + num + "天");
}
}
打印结果:
请输入年份:
2020
请输入月份:
2
请输入日期:
29
这是2020年的第60天
11.输入三个整数x,y,z,请把这三个数由小到大输出。
package com.company.practice;
import java.util.Scanner;
/**
* 输入三个整数x,y,z,请把这三个数由小到大输出。
*/
public class Test12 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入x:");
int x = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入y:");
int y = scanner.nextInt();
Scanner scanner2 = new Scanner(System.in);
System.out.println("请输入z:");
int z = scanner.nextInt();
if (x > y && x > z){ // 先把x最大的两种情况打印出来
if (y > z){ // 当y大于z时
System.out.println(z + "\t" + y + "\t" + x + "\t");
}else{
System.out.println(y + "\t" + z + "\t" + x + "\t");
}
}
if (y > x && y > z){ // 同理
if (x > z){
System.out.println(z + "\t" + x + "\t" + y + "\t");
}else {
System.out.println(x + "\t" + z + "\t" + y + "\t");
}
}
if (z > x && z > y) { // 同理
if (x > y){
System.out.println(y + "\t" + x + "\t" + z + "\t");
}else{
System.out.println(x + "\t" + y + "\t" + z + "\t");
}
}
}
}
打印结果:
请输入x:
20
请输入y:
36
请输入z:
39
20 36 39
12.输出9*9口诀
package com.company.practice;
/**
* 输出9*9口诀
*/
public class Test13 {
public static void main(String[] args) {
for (int i = 1; i < 10; i++){ // 1 -- 9
for (int j = 1; j < i + 1; j++){ // 1 -- i
// 当i为1时,即1 * 1 = 1
// 当i为2时,即2 * 1 = 2, 2 * 2 = 4
// 所以i * j 换成j * i 即1 * 2 = 2, 2 * 2 = 4
System.out.print((j + "*" + i + "=" + j*i) + "\t"); // 注意这里不是println
}
System.out.println(); // 每打完一个循环换行
}
}
}
打印结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
13.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩 下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
package com.company.practice;
/**
* 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩
* 下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
* 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
*/
public class Test14 {
public static void main(String[] args) {
int a = 1; // 第10天剩一个
for (int i = 0; i < 9; i++){ // 循环9天
a = (a + 1) * 2; // 因为吃一半还要再吃一个即a + 1 再 * 2
}
System.out.print("第一天摘了:" + a);
// 这猴子真能吃,第一天吃700多个还没吃饱,还要再吃一个
}
}
打印结果:
第一天摘了:1534
14.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向 队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
package com.company.practice;
/**
* 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向
* 队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
*/
public class Test15 {
public static void main(String[] args) {
for (char a = 'x'; a <= 'z'; a++){ // 即循环x y z三个字符
for (char b = 'x'; b <= 'z'; b++){
if (a != b){ // 不能重复
for (char c = 'x'; c <= 'z'; c++){
if (b != c && a != c){ // 不能重复
if (a != 'x' && c != 'x' && c != 'z'){ // 因为a不跟x比 c不跟x z比
System.out.println(">>>>>>>>>>>>>");
System.out.println("a与" + a + "比赛");
System.out.println("b与" + b + "比赛");
System.out.println("c与" + c + "比赛");
}
}
}
}
}
}
}
}
打印结果:
>>>>>>>>>>>>>
a与z比赛
b与x比赛
c与y比赛
15.打印出如下图案(菱形)
package com.company.practice;
/**
* 打印出如下图案(菱形)
* *
* ***
* *****
* *******
* *****
* ***
* *
*/
public class Test16 {
public static void main(String[] args) {
for (int i = 1; i <= 4; i++){ // 先把上面的4层打印了
for (int j = 1; j <= 4 - i; j++){
System.out.print(" "); // 打印前面的空格
}
for (int k = 1; k <= 2*i-1; k++){
System.out.print("*"); // 打印完当前循环空格后打印 *
}
System.out.println(); // 记得每打印完一行的 * 换行
}
for (int x = 3; x > 0; x--){ // 再倒叙打印
for (int y = 1; y <= 4 - x; y++){
System.out.print(" ");
}
for (int z = 1; z <= 2*x-1; z++){
System.out.print("*");
}
System.out.println();
}
}
}
打印结果:
*
***
*****
*******
*****
***
*
16.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
package com.company.practice;
/**
* 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
*
* 解题思路:先找出规律,这个分子等于上一个分数的分子加分母,分母等于前一个的分子。但是这里我为了好计算
* 用的另一个规律,即分母等于分子减去上一个分母(2/1 3/2 即3 = 1 + 2 2 = 3 - 1 )
*/
public class Test17 {
public static void main(String[] args) {
double molecule = 2; // 先把第一个的分子赋值
double denominator = 1; //先把第一个的分母赋值
double sum = 0; // 计算总数的
for (int i = 0; i < 20; i++){
sum += molecule / denominator; // 总数的累加
molecule = molecule + denominator;
denominator = molecule-denominator;
}
System.out.println(sum);
}
}
打印结果:
32.66026079864164
17.利用递归方法求5!
package com.company.practice;
/**
* 利用递归方法求5!
*/
public class Test18 {
public static void main(String[] args) {
System.out.println(recursion(5)); // 传值 5
}
public static int recursion(int n){
if (n == 1){ // 加上一个终止条件
return 1;
}else {
return recursion(n - 1) * n; // 自己调用自己 即递归
}
}
}
打印结果:
120
18.求1+2!+3!+…+20!的和
package com.company.practice;
/**
* 求1+2!+3!+...+20!的和
*/
public class Test19 {
public static void main(String[] args) {
long num = 1L; // 定义起始1 因为数据后面肯定会大于int的取值范围 所以用long
long sum = 0L;
for (int i = 1; i <= 20; i++){
num = i * num;
sum = sum + num;
}
System.out.println(sum);
}
}
打印结果:
2561327494111820313
19.有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
package com.company.practice;
/**
* 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问
* 第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
* 人多大?
*/
public class Test20 {
public static void main(String[] args) {
int five = 0;
int one = 10; // 第一个人10岁
for (int i = 1; i <= 4; i++){ // 循环4次
one += 2; // 每次都加2即为上一个人的岁数
five = one;
}
System.out.println(five);
}
}
打印结果:
18
20.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
package com.company.practice;
import sun.awt.LightweightFrame;
import javax.swing.plaf.synth.SynthLookAndFeel;
import java.util.Scanner;
/**
* 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
*/
public class Test21 {
public static void main(String[] args) {
// 第一种解法(笨方法)
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个不多于5位的正整数:");
int a = scanner.nextInt();
int x = a/10000;
int y = a%10000/1000;
int z = a%1000/100;
int i = a%100/10;
int j = a%10;
if (x != 0) {
System.out.println("为5位数" + "逆序为:" + j + i + z + y + x);
} else if (y != 0) {
System.out.println("为4位数" + "逆序为:" + j + i + z + y);
} else if (z != 0) {
System.out.println("为3位数" + "逆序为:" + j + i + z);
}else if (i != 0) {
System.out.println("为2位数" + "逆序为:" + j + i);
}else {
System.out.println("为1位数" + "逆序为:" + j);
}
// 第二种解法
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入一个不多于5位的正整数:");
int num = scanner1.nextInt();
String s = String.valueOf(num); // 将int类型 num转换位字符串
System.out.println("为" + s.length() + "位数"); // 打印其长度即可知几位数
char[] chars = s.toCharArray(); // 将其转为字符数组
System.out.print("逆序为:");
for (int k = s.length() - 1; k >= 0; k--){ // 倒叙打印 记得要长度减1,因为不可超出索引
System.out.print(chars[k]);
}
}
}
打印结果:
请输入一个不多于5位的正整数:
1234
为4位数逆序为:4321
请输入一个不多于5位的正整数:
56789
为5位数逆序为:98765
21.一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
package com.company.practice;
import java.util.Scanner;
/**
* 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
*/
public class Test22 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个5位数:");
int a = scanner.nextInt();
String s = String.valueOf(a);
char[] chars = s.toCharArray();
if ((chars[4] == chars[0]) && (chars[3] == chars[1])){ // 判断个万位 十千位 是否相同
System.out.println(a + ":这个数是回文数");
}else {
System.out.println(a + ":这个数不是回文数");
}
}
}
打印结果:
请输入一个5位数:
12321
12321:这个数是回文数
22.求100之内的素数
package com.company.practice;
/**
* 求100之内的素数
*/
public class Test23 {
public static void main(String[] args) {
int a = 0;
for (int i = 2; i <= 100; i++){
boolean b = true; // 因为2位素数,所以默认初始为true
for (int j = 2; j < i; j++){
if (i % j == 0){ // 当能整除时,将b改为false
b = false;
break;
} else {
b = true; // 否则不变,b还是true
}
}
if (b){ // 如果b为true,即打印素数
a++;
System.out.print(i + "\t");
if (a%8 == 0) {
System.out.println();
}
}
}
}
}
打印结果:
2 3 5 7 11 13 17 19
23 29 31 37 41 43 47 53
59 61 67 71 73 79 83 89
97
23.对10个数进行排序
package com.company.practice;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/**
* 对10个数进行排序
*/
public class Test24 {
public static void main(String[] args) {
// 方法1
Scanner scanner = new Scanner(System.in);
System.out.println("请输入10个数:");
int[] a = new int[10];
for (int i = 0; i < 10; i++){
a[i] = scanner.nextInt();
}
Arrays.sort(a); // 采用数组的Arrays.sort方法直接进行排序
for (int s:a){
System.out.println(s);
}
// 这里再写一个使用排序算法的解法 选择排序
for (int j = 0; j < a.length - 1; j++){
for (int k = j + 1; k < a.length; k++){
if (a[j] > a[k]){
int b = a[j];
a[j] = a[k];
a[k] = b;
}
}
}
System.out.println("选择排序:");
for ( int z = 0; z < 10; z++){
System.out.println(a[z]);
}
}
}
打印结果:
请输入10个数:
12
10
22
8
5
3
6
18
15
4
3 4 5 6 8 10 12 15 18 22
选择排序:
3 4 5 6 8 10 12 15 18 22
24.求一个3*3矩阵对角线元素之和
package com.company.practice;
import java.util.Scanner;
/**
* 求一个3*3矩阵对角线元素之和
*/
public class Test25 {
public static void main(String[] args) {
int[][] a = new int[3][3]; // 定义一个二维数字组
System.out.println("请输入9个数字:");
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
a[i][j] = scanner.nextInt();
}
}
System.out.println("输出二维数组:");
for (int k = 0; k < 3; k++){
for(int l = 0; l < 3; l++){
System.out.print(a[k][l] + "\t");
}
System.out.println();
}
System.out.println("计算:");
int sum = 0;
for (int x = 0; x < 3; x++){
for (int y = 0; y < 3; y++){
if ((x == y) || (x + y == 2)) { //从二维数组找规律 可得知
sum = sum + a[x][y];
}
}
}
System.out.println(sum);
}
}
打印结果:
请输入9个数字:
1
2
3
4
5
6
7
8
9
输出二维数组:
1 2 3
4 5 6
7 8 9
计算:
25