参考文章: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]); } } }