Java入门练习50题

参考文章:https://wenku.baidu.com/view/7ba13d7fe87101f69f319558.html?qq-pf-to=pcqq.group

部分内容做了改动,题目还是很好的.适合练手.

/*

1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子

小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问

到了第n个月兔子为多少对?(键盘录入n)

提示:同斐波那契数列问题

*/

 

/*

//解法一:

import java.util.Scanner;

class Test01

{

public static void main(String[] args)

{

int f1 = 1;//第一个月兔子对数

int f2 = 1;//第二个月兔子对数

int f;//f是一个中间变量

Scanner sc = new Scanner(System.in);

System.out.println("请输入n的值:");

int n = sc.nextInt();//输入要计算第几个月的值

if (n==1||n==2)

{

sum = 1;

System.out.println("第" + n + "月有" + sum + "对兔子");

}

for (int m = 3; m<=n; m++)

{

f = f2;

f2 = f + f1;//f2代表本月兔子数,通过f,变幻f1,f2的值

f1 = f;

}

System.out.println("第" + n + "月有" + f2 + "对兔子");

}

}

*/

 

//解法2(递归)

import java.util.Scanner;

class Test01

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入n的值:");

int n = sc.nextInt();

int sum = fibo(n);

System.out.println("第" + n + "月有" + sum + "对兔子");

}

public static int fibo(int n)

{

int sum = 0;

if (n==1)

{

return 1;

}

else if (n==2)

{

return 1;

}

else if (n>2)

{

sum = fibo(n-1)+fibo(n-2);

}

return sum;

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

2.题目:判断101-200之间有多少个素数,并输出所有素数

(一,除2以外,其他素数都是奇数.二,使用Math.sqrt()方法)

*/

class Test02

{

public static void main(String[] args)

{

int count = 0;//计数器(记得初始化)

System.out.println("求出的素数为:");

for (int row = 101; row < 200; row+=2)//101到200的数,被除数

{

int col;//除数

for (col = 2; col <= Math.sqrt(row); col++)

{

if (row % col == 0)

{

break;//不是素数,跳出本层循环

}

}

if (col == (int)Math.sqrt(row)+1)//内层for循环遍历完了,是素数

{

count++;

System.out.print(row+ " ");

if (count % 5 == 0)

{

System.out.println();

}

}

}

System.out.println();

System.out.println("素数的个数为:" + count);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

3.题目:打印出所有的水仙花数.如153=1*1*1+5*5*5+3*3*3

一,三位数;二,各个位的立方和为原数

*/

class Test03

{

public static void main(String[] args)

{

for (int num = 100; num<999; num++)

{

int num1 = num % 10;//个位

int num2 = num / 100;//百位

int num3 = num / 10 % 10;//十位

int sum = num1*num1*num1+num2*num2*num2+num3*num3*num3;

if (sum==num)

{

System.out.println(num);

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

4.题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成.

(1)如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印即可.

(2)如果n不等k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,

重复执行第一步.

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步.

*/

import java.util.Scanner;

class Test04

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个正整数:");

int n = sc.nextInt();

int k = 2;

System.out.print(n + "=");

while (k<=n)//当k的值小于等于n的值时,执行循环

{

if (k==n)//当两者相等时,k其实就是最后一个因数

{

System.out.println(n);

break;//求解完毕,跳出循环

}

else if (n % k == 0)//能整除,说明是其中一个因数

{

n = n/k;//已经求出一个因数,更新n的值

System.out.print(k + "*");

}

else

k++;//淘汰掉非因数的值,更新k值

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

5.题目:利用条件运算符的嵌套来完成此题(假设百分制)

>=90   A

60-89  B

<60    C

*/

import java.util.Scanner;

class Test05

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入您的分数:");

int score = sc.nextInt();

if (score >= 90 && score <= 100)

{

System.out.println("A");

}

else if (score>=60)

{

System.out.println("B");

}

else if (score>=0)

{

System.out.println("C");

}

else

{

System.out.println("录入非法");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

6.题目:输入两个正整数m和n,求其最大公约数和最小公倍数.

*/

import java.util.Scanner;

class Test06

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入第一个正整数:");

int m = sc.nextInt();

System.out.println("请输入第二个正整数:");

int n = sc.nextInt();

int min = m>n?m:n;

for (int x = min; x>=1; x--)

{

if (m%x==0 && n%x==0)

{

System.out.println("最大公约数为:" + x);

System.out.println("最小公倍数为:" + (m*n/x));

break;

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

7.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数.

*/

import java.util.Scanner;

class  Test07

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一行字符:");

String str = sc.nextLine();//了解next与nextLine的区别(帮助文档)

char[] ch = str.toCharArray();

int characterCount = 0;//统计字符个数

int numberCount = 0;//统计数字个数

int spaceCount = 0;//统计空格个数

int otherCount = 0;//统计其他字符个数

for (int n = 0; n < ch.length; n++)

{

char c1 = ch[n];

if ((c1>='A' && c1<='Z') ||(c1>='a' && c1<='z'))

{

characterCount++;

}

else if (c1>='0' && c1<='9')

{

numberCount++;

}

else if (c1==' ')

{

spaceCount++;

}

else

{

otherCount++;

}

}

System.out.println("字符个数为:" + characterCount +"   数字个数为:" + numberCount);

System.out.println("空格个数为:" + spaceCount +"   其他字符个数为:" + otherCount);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

8.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字

几个数相加由键盘控制(n)

*/

import java.util.Scanner;

class  Test08

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入a的值(1-9):");

int a = sc.nextInt();

System.out.println("请输入正整数n的值:");

int n = sc.nextInt();

int s = 0;

int a1 = a;

for (int x = 1; x <= n; x++)

{

s += a1;

a1 = a1*10 + a;

}

System.out.println("相加之和为:" + s);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

9.题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".

例如6=1+2+3.编程找出1000以内的所有完数.

*/

class Test09

{

public static void main(String[] args)

{

//int sum = 0;

//如果放在这个地方,相当于求的是所有数的因数的和

//不符合题意

for (int num1 = 1; num1 < 1000; num1++)

{

int sum = 0;

//放在这里,求的是每一个数的因数的和.

//因为每次求完一个数有一个初始化为0的操作.

for (int num2 = 1; num2 <= num1/2;num2++ )//这个地方由于要求因数,不能用Math.sqrt()方法

{

if (num1 % num2 == 0)

{

sum+=num2;

}

}

if (sum == num1)

{

System.out.println(num1);

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

10.题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;

再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

*/

class Test10

{

public static void main(String[] args)

{//100 100+50+50=100+100=200 200+25+25=200+50=250 250+12.5+12.5=250+25=275

double height = 100,sum = 100;//第一次落地

for (int n = 1;n < 10;n++)//剩余九次

{

sum = sum+height;

height = height/2;//计算每次反弹的高度

}

System.out.println("共经过" + sum + "米");

System.out.println("第十次反弹的高度是" + height + "米");

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

11.题目:有1,2,3,4四个数字,

能组成多少个互不相同且无重复数字的三位数?

都是多少?

*/

class Test11

{

public static void main(String[] args)

{

int count = 0;//计数器

System.out.println("能够组成的三位数为:");

for (int n1 = 1; n1 <= 4; n1++)

{

for (int n2 = 1; n2 <= 4; n2++)

{

for (int n3 = 1; n3 <= 4; n3++)

{

if (n1!=n2 && n2!=n3 && n1!=n3)

{

int number = n1*100 + n2*10 + n3;

count++;

System.out.print(number + " ");

if (count % 5 == 0)

{

System.out.println();

}

}

}

}

}

System.out.println();

System.out.println("组成的三位数的个数为:" + count);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

12.题目:企业发放的奖金根据利润提成.利润(1)低于或等于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%提成,

从键盘输入当月利润,求应发放奖金总数?

*/

import java.util.Scanner;

class Test12

{

public static void main(String[] args)

{

double x = 0,y = 0;

System.out.print("输入当月利润(万):");

Scanner s = new Scanner(System.in);

x = s.nextInt();

if (x>0 && x<=10)

{

y = x*0.1;

}

else if (x > 10 && x <= 20)

{

y = 10 * 0.1 + (x - 10)*0.075;

}

else if (x > 20 && x <= 40)

{

y = 10 * 0.1 + 10 * 0.075 + (x-20)*0.05;

}

else if (x > 40 && x <= 60)

{

y = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (x-40) * 0.03;

}

else if (x > 60 && x <= 100)

{

y = 20 * 0.175 + 20 * 0.05 + 20 * 0.03 + (x-60)*0.015;

}

else if (x > 100)

{

y = 20 * 0.175 + 40 * 0.08 + 40 * 0.015 + (x-100)*0.01;

}

System.out.println("应该提取的奖金是" + y + "万");

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

13.题目:一个整数,它加上100后是一个完全平方数,

再加上168又是一个完全平方数,请问该数是多少?

*/

class Test13

{

public static void main(String[] args)

{

//正整数

System.out.println("当该数为正整数可取的值有:");

for (int num = 1; num <= 100000; num++)

{

/*Math.sqrt(num)运算的结果是double,

如果num是完全平方数,那么开方的结果将会是整数例如3.0,

它对1取模的结果将为0,否则不为0*/

if (Math.sqrt(num+100) % 1 == 0)

{

if (Math.sqrt(num+268) % 1 == 0)

{

System.out.println(num);

}

}

}

System.out.println("********************************");

System.out.println("当该数为负整数可取的值有:");

for (int num = -100000; num < 0; num++)

{

/*Math.sqrt(num)运算的结果是double,

如果num是完全平方数,那么开方的结果将会是整数例如3.0,

它对1取模的结果将为0,否则不为0*/

if (Math.sqrt(num+100) % 1 == 0)

{

if (Math.sqrt(num+268) % 1 == 0)

{

System.out.println(num);

}

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

14.题目:输入某年某月某日,判断这一天是这一年的第几天?

*/

import java.util.Scanner;

class  Test14

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

int year,month,day,days = 0,sum = 0;//初始化初始化

boolean b1 = false;

do

{

System.out.println("请输入年份:");

year = sc.nextInt();

System.out.println("请输入月份:");

month = sc.nextInt();

System.out.println("请输入日期:");

day = sc.nextInt();

if (year < 0 || month <0 ||month > 12 || day <0||day>31)

{

System.out.println("***录入非法,请重新录入***");

b1 = true;

}

}while (b1);

for (int m = 1; m < month; m++)

{

switch (m)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

days = 31;

break;

case 4:

case 6:

case 9:

case 11:

days = 30;

break;

case 2:

if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0) )

{

days = 29;

break;

}

else

days = 28;

break;

}

sum += days;

}

System.out.println("这是" + year + "年的第" + (sum + day) + "天");

 

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

15.题目:输入n个整数,请把这n个数由小到大输出.

[数组]用数组接收,然后排序,可以写个方法

*/

import java.util.Scanner;

class Test15

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入有几个整数:");

int n = sc.nextInt();

int[] arr = new int[n];

getArr(arr);//赋值

sortArr(arr);//排序

System.out.println("从小到大输出的结果为:");

traverseArr(arr);//遍历

System.out.println();

}

//为数组赋值

public static void getArr(int[] arr)

{

for (int m = 0; m < arr.length; m++)

{

System.out.println("请输入第" + (m+1) + "个数:");

Scanner sc = new Scanner(System.in);

arr[m] = sc.nextInt();

}

}

//给数组排序(选择)

public static void sortArr(int[] arr)

{

for (int num1 = 0; num1 < arr.length - 1; num1++)

{

for (int num2 = num1 + 1; num2 < arr.length; num2++)

{

if (arr[num1] > arr[num2])

{

int temp = arr[num1];

arr[num1] = arr[num2];

arr[num2] = temp;

}

}

}

}

//遍历数组

public static void traverseArr(int[] arr)

{

for (int num = 0; num < arr.length; num++)

{

System.out.print(arr[num] + " ");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

16.输出九九乘法表

*/

class Test16

{

public static void main(String[] args)

{

for (int num1 = 1; num1 <= 9; num1++)

{

for (int num2 = 1; num2 <= num1; num2++)

{

System.out.print(num2 + "*" + num1 + "=" + num1*num2 + " ");

if (num1*num2 < 10)

{

System.out.print(" ");

}

}

System.out.println();

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

17.题目:猴子吃桃问题:猴子第一天摘下若干个桃子 ,当即吃了一半,

又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后

每天早上都吃了前一天剩下的一半零一个.到第10天早上再想吃的时候,

只剩下一个桃子了.求第一天摘了多少?

*/

class Test17

{

public static void main(String[] args)

{// total -total/2-1=num

int num = 1;//第十天

for (int n = 1; n < 10; n++)//前面九天

{

num = (num+1)*2;

}

System.out.println("第一天共摘了" + num + "个桃子");

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

18.题目:两个乒乓球队进行比赛,各处三人.甲队为a,b,c三人,

乙队为x,y,z三人.a不跟x比,c不跟x,z比.编程找出赛手名单.

//感觉这个题解的毫无意义QAQ

*/

class Test18

{

public static void main(String[] args)

{

char[] c1 = {'a','b','c'};

char[] c2 = {'x','y','z'};

for (int n1 = 0; n1 < c1.length; n1++)

{

for (int n2 = 0; n2 < c2.length; n2++)

{

if (c1[n1] == 'c' && (c2[n2] == 'x' || c2[n2] == 'z'))

{

continue;

}

else if (c1[n1] == 'a' && (c2[n2] == 'z' || c2[n2] == 'y'))

{

continue;

}

else if (c1[n1] == 'b' && (c2[n2] == 'x' || c2[n2] == 'y'))

{

continue;

}

else

{

System.out.println(c1[n1] + "****VS****" +c2[n2]);

}

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

19.打印菱形

   *

  ***

 *****

*******

 *****

  ***

   *

打印一个这种菱形,行列数相等,行列数目通过键盘录入(奇数)

*/

import java.util.Scanner;

class Test19

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

boolean b1 = false;

int n = 0;

do

{

System.out.println("请输入一个大于2的奇数:");

n = sc.nextInt();

if (n % 2 == 0 || n < 2)

{

System.out.println("录入有误,请重新录入");

b1 = true;

}

}

while (b1);

 

//打印上半部分

for (int n1 = 1; n1 <= (n+1)/2; n1++)

{

//打印空格3,2,1...

for (int n2 = (n+1)/2-n1; n2 >=1; n2--)

{//第四行不用输出空格了,循环三次即可(以7为例子)

System.out.print(" ");

}

//打印星号1,3,5,7...

for (int n2 = 1; n2 <= 2*n1-1; n2++)

{

System.out.print("*");

}

System.out.println();//换行

}

//打印下半部分

for (int n1 = 1; n1 <= n/2; n1++)

{

//打印空格1,2,3...

for (int n2 = 1; n2 <= n1; n2++)

{

System.out.print(" ");

}

//打印星号5,3,1....

for (int n2 = 1; n2 <= n-2*n1; n2++)

{

System.out.print("*");

}

System.out.println();//换行

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

20.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个

数列的前20项之和.

*/

class Test20

{

public static void main(String[] args)

{

double sum = 0;//分数求和,用double类型定义

int n1 = 2,n2 = 1;//n1存分子,n2存分母

for (int n = 1; n <= 20; n++)

{

sum += (double)n1/n2;

int temp = n1;//用临时变量存上一个分子的值

n1 = n1 + n2;//分子重新赋值为上一个分子分母之和

n2 = temp;//将上一个分子的值传给下一个分母

}

System.out.println("此数列前20项的和为:" + String.format("%.2f",sum));

//保留两位小数

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

21.求1+2!+3!+...+20!的和(和超过int类型的范围,故而定义为long类型)

*/

 

/*

//解法一:

class Test21

{

public static void main(String[] args)

{

long sum = 0,number = 1;

for (int n = 1; n <= 20; n++)

{

number *= n;//1  1*2 1*2*3

sum += number;//求和

}

System.out.println(sum);

}

}

*/

 

//解法二(递归):

class Test21

{

public static void main(String[] args)

{

long sum = 0;

for (int n = 1; n <= 20; n++)

{

sum += fac(n);

}

System.out.println(sum);

}

public static long fac(int n)

{

long num = 0;

if (n==1)

{

return 1;

}

else

{

num = n * fac(n-1);

}

return num;

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

22.题目:利用递归方法求5!

上一题求过,啧啧啧

*/

class Test22

{

public static void main(String[] args)

{

long number = fac(5);

System.out.println(number);

}

public static long fac(int n)

{

long num = 0;

if (n==1)

{

return 1;

}

else

{

num = n * fac(n-1);

}

return num;

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

23.题目:有5个人坐在一起,问第五个人多少岁?他比第四个人大2岁.

第四个比第三个大2岁.第三个比第二个大2岁.第二个比第一个大2岁.

第一个人10岁.

*/

class Test23

{

public static void main(String[] args)

{

int age = 10;

for (int n = 1; n < 5; n++)

{

age = age + 2;

}

System.out.println(age);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

24.题目:给一个不多于5位的正整数,要求:一.求它是几位数.

二.逆序打印出各位数字

//使用了长整型,最多输入18位

*/

import java.util.Scanner;

class Test24

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个正整数:");

long num = sc.nextLong();//接收长整型数字

String str = Long.toString(num);//将长整型数字num转为字符串类型

char[] ch = str.toCharArray();

System.out.println("它是一个" + ch.length + "位数");

System.out.println("按照逆序输出结果是:");

for (int n = ch.length-1; n >= 0; n--)

{

System.out.print(ch[n]);

}

System.out.println();

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

25.题目:判断一个数是不是回文数.即12321是回文数,

个位与万位相同,十位与千位相同.

*/

import java.util.Scanner;

class Test25

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个正整数:");

long num = sc.nextLong();//接收长整型数字

String str = Long.toString(num);//将数字转为字符串

char[] ch = str.toCharArray();//将字符串转为字符数组

int n1,n2;

for (n1 = 0,n2 = ch.length-1; n1 < n2; n1++,n2--)

{

if (ch[n1] != ch[n2])

{

System.out.println("这个数不是一个回文数");

break;

}

}

if (n1 >= n2)

{

System.out.println("这个数是一个回文数");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

26.题目:请输入星期几的第一个字母来判断一下是星期几,

如果第一个字母一样,

则继续判断第二个字母.

*/

import java.util.Scanner;

class Test26

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入第一个字符(M,T,W,F,S):");

char c1 = sc.nextLine().charAt(0);

char c2;

switch(c1)

{

case 'M':

System.out.println("Monday");

break;

case 'W':

System.out.println("Wednesday");

break;

case 'F':

System.out.println("Friday");

break;

case 'T':

System.out.println("请输入第二个字符(u,h):");

c2 = sc.nextLine().charAt(0);

if (c2 == 'u')

{

System.out.println("Tuesday");

break;

}

else if (c2 == 'h')

{

System.out.println("Thursday");

break;

}

else

{

System.out.println("录入非法");

}

case 'S':

System.out.println("请输入第二个字符(u,a):");

c2 = sc.nextLine().charAt(0);

if (c2 == 'a')

{

System.out.println("Saturday");

break;

}

else if (c2 == 'u')

{

System.out.println("Sunday");

break;

}

else

{

System.out.println("录入非法");

}

default:

System.out.println("录入非法");

 

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

27.题目:求100之内的素数

*/

class Test27

{

public static void main(String[] args)

{

int count = 0,num,n;

for (num = 1; num <= 100; num++)

{

for (n = 2; n <= num/2; n++)

{

if (num % n == 0)

{

break;

}

}

if (n == num/2+1)

{

count++;

System.out.print(num + " ");

if (num < 10 )

{

System.out.print(" ");

}

if (count % 5 == 0)

{

System.out.println();

}

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

28.题目:对10个数进行排序

(请参考本文15题,里面写了个普适的方法);

*/

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

29.题目:求一个n*n矩阵主对角线元素之和(int类型)

*/

import java.util.Scanner;

class Test29

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入矩阵的阶数:");

int n = sc.nextInt();

int[][] arr = new int[n][n];

getArr(arr);//赋值

traverseArr(arr);//遍历

getSum(arr);//求和

}

//为矩阵赋值

public static void getArr(int[][] arr)

{

for (int row = 0; row < arr.length; row++)

{

for (int col = 0; col < arr[row].length; col++)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入第" + (row+1) + "行,第" + (col+1) +"列的值:");

arr[row][col] = sc.nextInt();

}

}

}

//遍历矩阵

public static void traverseArr(int[][] arr)

{

System.out.println("矩阵为:");

for (int row = 0; row < arr.length; row++)

{

for (int col = 0; col < arr[row].length; col++)

{

System.out.print(arr[row][col] + " ");

}

System.out.println();

}

}

//求主对角线元素之和

public static void getSum(int[][] arr)

{

int sum = 0;

for (int row = 0; row < arr.length; row++)

{

for (int col = 0; col < arr[row].length; col++)

{

if (row == col)

{

sum += arr[row][col];

}

}

}

System.out.println("主对角线元素之和为:"+ sum);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

30.题目:有一个已经排好序的数组.现输入一个数,

要求按原来的规律将它插入数组中(折半查找)

*/

import java.util.Scanner;

class Test30

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

int[] arr = {1,22,55,66,99};

int[] arr1 = new int[arr.length+1];

System.out.println("请输入需要插入的数字:");

int number = sc.nextInt();

int index = getIndex(arr,number);

arr1[index+1] = number;

for (int n = 0; n <= index; n++)

{

arr1[n] = arr[n];

}

for (int n = index+1; n < arr.length; n++)

{

arr1[n+1] = arr[n];

}

System.out.println("插入" + number + "后的数组为:");

for (int n = 0; n < arr1.length; n++)

{

System.out.print(arr1[n] + " ");

}

}

//折半查找,索引

public static int getIndex(int[] arr,int num) {

int min = 0;

int max = arr.length - 1;

int mid = (min+max)/2;

while (max > min)

{

if (num >= arr[mid])

{

if (num <= arr[mid + 1])

{

return mid;

}

min = mid + 1;

mid = (max + min)/2;

}

else

{

if (num >= arr[mid-1])

{

return mid-1;

}

max = mid - 1;

mid = (min + max)/2;

}

}

return min;

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

31.将一个数组逆序输出

*/

class Test31

{

public static void main(String[] args)

{

int[] arr = {1,2,3,4,53,22};

for (int n = arr.length-1; n>= 0; n--)

{

System.out.print(arr[n] + " ");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

32.题目:取一个整数a从右端开始的4~7位

*/

import java.util.Scanner;

class Test32

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.print("请输入一个7位以上的正整数:");

long num = sc.nextLong();

String str = Long.toString(num);

char[] ch = str.toCharArray();

int le = ch.length;

if (le < 7)

{

System.out.println("输入有误");

}

else

{

System.out.println("截取从右端开始的4~7位是:" + ch[le-7] + ch[le-6] +ch[le-5] +ch[le-4]);

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

33.题目:打印出杨辉三角形(要求打印出10行)

                  1(00)

  1(10)     1(11)

1(20)     2(21)    1(22)

  1   3(31)      3(32)     1

*/

class Test33

{

public static void main(String[] args)

{

int[][] a = new int[10][10];//用二维数组存储

for (int i = 0; i<10; i++)

{

a[i][i] = 1;//将所有的1赋给数组

a[i][0] = 1;

}

for (int i = 2; i<10; i++)

{

for (int j = 1; j

{

a[i][j] = a[i-1][j-1] + a[i-1][j];

//a[2][1] = a[1][0] + a[1][1];

//emmm不得不说,设计很棒

}

}

        

/*辅助理解

//遍历二维数组a

for (int n1 = 0; n1 < 10; n1++)

{

for (int n2 = 0; n2 < 10; n2++)

{

System.out.print(a[n1][n2] + " ");

if (a[n1][n2] < 10)

{

System.out.print("  ");

}

else if (a[n1][n2] < 100)

{

System.out.print(" ");

}

}

System.out.println();

System.out.println();

}

*/

//至此,将杨辉三角中所有数都存到了二维数组中

 

//开始打印杨辉三角

for (int i = 0; i<10; i++)

{

//打印空格

for (int k = 0; k<2*(10-i)-1; k++)

{

System.out.print(" ");

}

//打印数字

for (int j = 0; j<=i; j++)

{

System.out.print(a[i][j]+"  ");

}

System.out.println();

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

34.题目:输入3个数a,b,c,按大小顺序输出

(做法很多,本文15题写了个普适的,可参考)

*/

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

35.题目:输入数组,最大的与第一个元素交换,

最小的与最后一个元素交换输出数组.

*/

import java.util.Scanner;

class Test35

{

public static void main(String[] args)

{

int n = 6;

int[] a = new int[n];

Scanner sc = new Scanner(System.in);

int idx1 = 0,idx2 = 0;

for (int i = 0; i

{

System.out.println("请输入第" + (i+1) + "个整数:");

a[i] = sc.nextInt();

}

System.out.println("你输入的数组为:");

for (int i = 0; i < n; i++)

{

System.out.print(a[i] + " ");

}

int max = a[0],min = a[0];

for (int i = 0; i < n; i++)

{

if (a[i] > max)

{

max = a[i];

idx1 = i;//注意,这一点只需要获取下标即可

}

if (a[i] < min)

{

min = a[i];

idx2 = i;

}

}

if (idx1!=0)

{

int temp = a[0];

a[0] = a[idx1];

a[idx1] = temp;

}

if (idx2!=n-1)

{

int temp = a[n-1];

a[n-1] = a[idx2];

a[idx2] = temp;

}

System.out.println("\n交换后的数组为:");

for (int i = 0; i < n; i++)

{

System.out.print(a[i] + " ");

}

}

 

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

36.题目:有n个整数,使其前面各数顺序向后移

m个位置,最后m个数变成最前面的m个数

*/

import java.util.Scanner;

class Test36

{

public static void main(String[] args)

{

int n = 4;

int[] a = new int[n];

Scanner s = new Scanner(System.in);

for (int  i = 0; i

{

System.out.println("请输入第" +(i+1)+"个整数:");

a[i] = s.nextInt();

}

System.out.print("你输入的数组为:");

for (int i = 0; i

{

System.out.print(a[i] + " ");

}

System.out.print("\n请输入向后移动的位数:");

int m = s.nextInt();

int[] b = new int[n];

/*

m=2;

0,1,2,3,4,5,6,7,8,9

8,9,0,1,2,3,4,5,6,7

*/

for (int num = 0; num < m; num++)

{

b[num] = a[n-m + num];

}

for (int num = 0; num < n-m; num++)

{

b[num+m] = a[num];

}

System.out.print("位移后的数组是:");

for (int i = 0; i

{

System.out.print(b[i]+" ");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

37.题目:有n个人围成一圈,顺序排号.从第一个人开始报数

(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来

第几号的那位.

*/

import java.util.Scanner;

public class Test37

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入有几个人:");

int n = sc.nextInt();

boolean[] arr= new boolean[n];//用一个数组存储n个人

for (int n1=0;n1

{

arr[n1] = true;//true代表人还在

}

int leftCount = n;//剩余人数,也就是数组中值为true的元素的个数

int index = 0;//数组下标

int countNum = 0;//报数变量,1,2,3,1,2,3

while (leftCount>1)//如果剩余人数大于1的话

{

if(arr[index]==true)//如果这个人没有被淘汰的话

{

countNum++;//开始报数1,2,3

if (countNum==3)//当报数到3时

{

countNum=0;//先将数置为0,便于下次报数

arr[index] = false;//这个人报数到3,将其淘汰,即将其值置为false

leftCount--;//剩余人数减少一人

}

}

index++;

if (index == n)//一轮结束后,开始下一轮

{

index = 0;//下一轮又从0开始判断

}

 

}

 

for (int n1 = 0; n1

{

if (arr[n1])

{

System.out.println("最后留下来的是" + (n1+1)+"号同学");

}

}

 

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

38.题目:输入字符串,并求其长度

*/

import java.util.Scanner;

class Test38

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个字符串:");

String str = sc.nextLine();

int length = str.length();

System.out.println(length);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

39.题目:编写一个函数,输入n为偶数时,调用函数求

1/2+1/4+...+1/n,当输入n为奇数时,

调用函数1/1+1/3+...+1/n

*/

import java.util.Scanner;

class Test39

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个数:");

int num = sc.nextInt();

double sum = getSum(num);

System.out.println(sum);

}

public static double getSum(int n)

{

double sum = 0;

if (n % 2 == 0)

{

int x = 2;

while (x<=n)

{

sum+=1.0/x;

x+=2;

}

}

else

{

int x = 1;

while (x<=n)

{

sum+=1.0/x;

x+=2;

}

}

return sum;

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

40.题目:字符串排序

*/

//字符串排序"matter","state","solid","liquid","gas"

//按照字典顺序排序,使用comepareTo()方法

class Test40

{

public static void main(String[] args)

{

int N = 5;

String temp = "";

String[] s = new String[N];

s[0] = "matter";

s[1] = "state";

s[2] = "solid";

s[3] = "liquid";

s[4] = "gas";

for (int i = 0; i

{

for (int j = i+1; j

{

if (s[i].compareTo(s[j])>0)

{

temp = s[i];

s[i] = s[j];

s[j] = temp;

}

}

}

for (int i = 0; i

{

System.out.println(s[i]);

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

41.题目:五个猴子分桃子.第一只把桃子平均分成五份,多了一个,扔进海里,拿走一份.

剩下的猴子也都是这么做的.问原来最少有多少个桃子?

*/

 

//人家让求最小的,求一个结果就行了

class Test41

{

public static void main(String[] args)

{

int num;

for (num=6; num<10000; num++)

{//6246 4996 3996 3196

int n;

int num2 = num;

for (n = 1; n<=5; n++)

{

int b1 = (num2-1)/5;

if ((num2-1)%5==0)

{

num2 = num2-1-b1;

}

else

{

break;

}

}

if (n==6)

{

System.out.println(num);

return;

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

42.题目:809x=800x+9x,求x

(感觉这题有点儿奇怪)

*/

class Test42

{

public static void main(String[] args)

{

for (int x = 10; x<13; x++)

{

int num1 = 809*x;

int num2 = 800*x + 9*x;

if (num1==num2)

{

System.out.println(x+"......" + num1+ "......." + num2);

}

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

43.题目:求0-7所能组成的奇数个数

组成1位数是4个

组成2位数是7*4个

组成3位数是7*8*4个

组成4位数是7*8*8*4个

*/

 

class Test43

{

public static void main(String[] args)

{

int sum = 4;

int j;

System.out.println("组成1位数是" + sum + "个");

sum = sum*7;

System.out.println("组成2位数是" + sum + "个");

for (j = 3; j<=9; j++)

{

sum=sum*8;

System.out.println("组成" + j + "位数是" + sum + "个");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

44.题目:一个偶数总能表示为两个素数之和

//由于用除sqrt(n)的方法求出的素数不包括2和3

//因此在判断是否是素数程序人为添加了一个3

*/

 

import java.util.Scanner;

class Test44

{

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

int n;

do

{

System.out.print("请输入一个大于等于6的偶数:");

n = s.nextInt();

}while (n<6||n%2!=0);

for (int i = 3; i<=n/2; i+=2)

{

if (fun(i)&&fun(n-i))

{

System.out.println(n + " = " + i + " + " + (n-i));

}

}

}

public static boolean fun(int a)

{

boolean flag = false;

if (a==3)

{

flag = true;

return flag;

}

for (int i = 2; i <=Math.sqrt(a); i++)

{

if (a%i==0)

{

flag=false;break;

}

else

flag = true;

}

return flag;

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

45.题目:判断一个整数能被几个9整除

*/

import java.util.Scanner;

class Test45

{

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

System.out.print("请输入一个整数:");

int num = s.nextInt();

int tmp = num;

int count = 0;

while (tmp % 9==0)

{

tmp = tmp / 9;

count++;

}

System.out.println(num+"能够被" + count + "个9整除.");

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

46.题目:两个字符串连接程序

*/

import java.util.Scanner;

class Test46

{

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

System.out.print("请输入一个字符串:");

String str1 = s.nextLine();

System.out.print("请再输入一个字符串:");

String str2 = s.nextLine();

String str = str1 +str2;

System.out.println("连接后的字符串是:" + str);

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

47.题目:读取47个数(1-50)的整数值,

每读取一个值,程序打印出改值个数的

(没什么鬼用的样子哦)

*/

import java.util.Scanner;

class Test47

{

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

int n = 1,num;

while (n<=7)

{

do

{

System.out.println("请输入第" + n + "个数:");

num = s.nextInt();

}

while (num<1||num>50);

for (int i = 1; i<=num; i++)

{

System.out.print("*");

}

System.out.println();

n++;

 

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

48.题目:某个公司采用公用电话传递数据,数据是四位的整数,

在传递过程中是加密的,加密规则如下:每位数字都加上5,然后

用和除以10的余数代替该数字,再将第一位和第四位交换,

第二位和第三位交换.

*/

import java.util.Scanner;

class Test48

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

int num = 0,temp;

do

{

System.out.print("请输入一个4位正整数:");

num = sc.nextInt();

}while (num < 1000||num>9999);

int a[] = new int[4];

a[0] = num/1000;//千位

a[1] = num/100%10;//百位

a[2] = num/10%10;//十位

a[3] = num%10;//个位

for (int j = 0; j<4; j++)

{

a[j] += 5;

a[j]%=10;

}

for (int j = 0; j<=1; j++)

{

temp = a[j];

a[j] = a[3-j];

a[3-j] = temp;

}

System.out.println("加密后的数字为:");

for (int j = 0; j<4; j++)

{

System.out.print(a[j]);

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

49.题目:计算字符串中子串出现的次数

(这个没有改)

*/

import java.util.Scanner;

class Test49

{

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

System.out.print("请输入字符串:");

String str1 = s.nextLine();

System.out.print("请输入子串:");

String str2 = s.nextLine();

int count = 0;

if (str1.equals("")||str2.equals(""))

{

System.out.println("你没有输入字符串或子串,无法比较!");

System.exit(0);

}

else

{

for (int i = 0; i<=str1.length()-str2.length(); i++)

{

if (str2.equals(str1.substring(i,str2.length()+i)))

{

count++;

}

 

}

System.out.println("子串在字符串中出现:"+count+"次");

}

}

}

*******************************************************************************

*******************************************************************************

*******************************************************************************

/*

50.题目:有五个学生,每个学生有3门课的成绩,键盘录入

学号,姓名,三门课成绩,算出平均成绩

*/

import java.util.Scanner;

class Test50

{

public static void main(String[] args)

{

String[][] arr = new String[5][6];

Scanner sc = new Scanner(System.in);

for (int n1 = 0; n1 < 5; n1++)

{

System.out.println("请输入第" + (n1+1) + "位学生的学号:");

arr[n1][0] = sc.nextLine();

System.out.println("请输入第" + (n1+1) + "位学生的姓名:");

arr[n1][1] = sc.nextLine();

System.out.println("请输入第" + (n1+1) + "位学生的语文成绩:");

arr[n1][2] = sc.nextLine();

System.out.println("请输入第" + (n1+1) + "位学生的数学成绩:");

arr[n1][3] = sc.nextLine();

System.out.println("请输入第" + (n1+1) + "位学生的英语成绩:");

arr[n1][4] = sc.nextLine();

double number = (Integer.parseInt(arr[n1][2])+Integer.parseInt(arr[n1][3])+Integer.parseInt(arr[n1][4]))/3.0;

//String.format("%.2f", f)

arr[n1][5] = String.format("%.1f",number);//将int类型的number保留两位小数输出

}

for (int n1=0; n1<5; n1++)

{

System.out.println("学号:" + arr[n1][0] + "   "+"姓名:" + arr[n1][1] + "   "+"语文成绩:" + arr[n1][2] + "   "+"数学成绩:" + arr[n1][3] + "   "+"英语成绩:" + arr[n1][4] + "   "+"平均成绩:" + arr[n1][5]);

}

 

}

}

 

 

 

 

 

你可能感兴趣的:(第一阶段)