JAVA 基础编程练习题

java

1 【程序 1 不死神兔】

题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月
又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....



package CountRabbit;

import java.io.*;

import java.util.Scanner;

public class CountRabbit {

/**

* 不死神兔算法,使用递归

*/

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.println("Please input mouth:");

int mouth = input.nextInt();

System.out.println("第"+mouth+"个月有"+getRabbitNum(mouth)+"只兔子");

// int mouth =3;

// System.out.println("第"+mouth+"个月有"+getRabbitNum(mouth)+"只兔子");

}

private static int getRabbitNum(int mouth){

if(mouth==1||mouth==2){

return 1;

}

else

return getRabbitNum(mouth-1)+getRabbitNum(mouth-2);

}

}

 

2 【程序 2 输出素数】

题目:判断 101-200 之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数,
反之是素数。



package FindPrimeNumber;

public class FindPrimeNumber {

//判断 101-200 之间有多少个素数,并输出所有素数。

public static void main(String[] args){

int count=0; //记录素数的个数

int flag; //flag为1则不是素数

int i,j; //用于for循环

System.out.println("101-200 之间的素数为:");

for(i=101;i<=200;i++){

int max = (int) Math.sqrt(i);

flag=0;

for(j=2;j<=max;j++){

if(i%j==0){

flag=1;

break;

}

}

if(flag==0){

System.out.println(i+" ");

count++;

}

}

System.out.println("共有"+count+"个素数");

}

}

3 【程序 3 水仙花数】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例
如: 153 是一个"水仙花数",因为 153=1 的三次方+5 的三次方+3 的三次方。
程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。



package NarcissisticNumber;

public class NarcissisticNumber {

//题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

public static void main(String[] args){

int a,b,c; //a,b,c分别为百位,十位,个位

int sum;

System.out.println("所有的\"水仙花数\"为:");

for(int i=100;i<1000;i++){

a=i/100;

b=(i/10)%10;

c=i%10;

sum=(int)Math.pow(a,3)+(int)Math.pow(b,3)+(int)Math.pow(c,3);

if(sum==i){

System.out.println(i);

}

}

}

}

4 【程序 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 的值,重复执行第一步。


package PrimeFactorization;

import java.util.Scanner;

public class PrimeFactorization {

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

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.println("Please input integer:");

int n= input.nextInt();

int flag;

String str = n+"=";

if(n==1){ //输入1时特殊处理

str = str+n+"*";

}

for(int i=2;i<=n;i++){

int max = (int) Math.sqrt(i);

flag=0;

for(int j=2;j<=max;j++){

if(i%j==0){

flag=1;

break;

}

}

if(flag==0){ //找到质数

if(n%i==0){ //该质数是n的因数

str=str+i+"*"; //字符修改

n=n/i; //修改n为除以i之后的数

i=1; //质数从2重新开始找

}

}

}

str = str.substring(0,str.length()-1); //去掉字符串中最后一个*

System.out.println(str);

}

}

5 【程序 5 判断分数等级】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示,
60 分以下的用 C 表示。
程序分析: (a>b)?a:b 这是条件运算符的基本例子。



package GradeLevel;

import java.util.Scanner;

public class GradeLevel {

public static void main(String[] args){

//题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示, 60-89 分之间的用 B 表示,

//60 分以下的用 C 表示。

System.out.println("请输入同学的成绩:");

Scanner in = new Scanner(System.in);

int n = in.nextInt();

char level = n>=60?(n>89?\'A\':\'B\'):\'C\';

System.out.println("该同学的成绩等级为:"+level);

}

}

6 【程序 6 求最大公约数及最小公倍数】
题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。


package LCMandHCF6;

import java.util.Scanner;

public class LCMandHCF {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

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

int A = input.nextInt();

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

int B = input.nextInt();

System.out.println("最大公约数为:"+getLCM(A,B));

System.out.println("最小公倍数为:"+getHCF(A,B));

}

private static int getLCM(int A,int B){

//求最大公约数,辗转相除法

int max=A>B?A:B; //得到A,B的较大值

int min=A>B?B:A; //得到A,B的较小值

int k=max%min; //余数

while(k!=0){

max=min;

min=k;

k=max%min;

}

return min;

}

private static int getHCF(int A,int B){

//求最小公倍数(最大公约数*最小公倍数=A*B)

return A*B/getLCM(A,B);

}

}

7 【程序 7 处理字符串】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用 while 语句,条件为输入的字符不为\'\n\'.


package CountString7;

import java.util.Scanner;

public class CountString {

public static void main(String[] args){

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

Scanner input = new Scanner(System.in);

String str = input.nextLine();

input.close();

count(str);

}

private static void count(String str){

String E1 = "[\u4e00-\u9fa5]";//汉字

String E2 = "[a-zA-Z]";

String E3 = "[0-9]";

String E4 = "\\s";//空格

int countChinese = 0;

int countEnglish = 0;

int countNumber = 0;

int countSpace = 0;

int countOthers = 0;

String[] s = str.split(""); //将字符串转化为字符串数组

/*

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

for (int j=0;j<array_Char.length;j++){

System.out.println(array_Char[j]);

}*/

for(int i=0;i<s.length;i++){

if(s[i].matches(E1))

countChinese++;

else if(s[i].matches(E2))

countEnglish++;

else if(s[i].matches(E3))

countNumber++;

else if(s[i].matches(E4))

countSpace++;

else

countOthers++;

}

System.out.println("输入的汉字个数:"+countChinese);

System.out.println("输入的字母个数:"+countEnglish);

System.out.println("输入的数字个数:"+countNumber);

System.out.println("输入的空格个数:"+countSpace);

System.out.println("输入的其它字符个数:"+countOthers);

}

}

8 【程序 8 输入数字求和】

题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此时共有 5 个
数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。


package Sum8;

import java.util.Scanner;

public class Sum {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.println("请输入a数字:");

int a = input.nextInt();

System.out.println("请输入相加的个数:");

int b = input.nextInt();

System.out.println("和为:"+Sum(a,b));

}

private static int Sum(int a,int b){

int sum=0;

for(int i=b,j=0;i>0;i--,j++){

sum=sum+i*a*(int)Math.pow(10,j);

}

return sum;

}

}

9 【程序 9 求完数】

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如 6=1+2+3.编程找出 1000 以内的
所有完数。



package PerfectNumber9;

public class PerfectNumber {

//题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如 6=1+2+3.编程找出 1000 以内的

//所有完数。

public static void main(String[] args){

int sum;

System.out.println("1000以内的完数有:");

for(int i=2;i<=1000;i++){ //从2遍历到1000

sum=0;

for(int j=1;j<i;j++){ //j从1遍历到i-1

if(i%j==0) //若j是i的因数

sum=sum+j;

}

if(sum==i){ //i是完数

System.out.println(i);

}

}

}

}

10 【程序 10 自由落体】
题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时,
共经过多少米?第 10 次反弹多高?


package FreeFall10;

public class FreeFall {

public static void main(String[] args){

//题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,

//共经过多少米?第 10 次反弹多高?

double h0=100;

double sum=h0,high=0; //sum为经过的长度,high为反弹的高度

int n=10; //第n次

for(int i=1;i<n;i++){

sum=sum+h0*Math.pow(0.5,i)*2;

}

high=h0*Math.pow(0.5,n);

System.out.println("第"+n+"次落地时共经过"+sum+"米");

System.out.println("第"+n+"次的反弹高度"+high+"米");

}

}

11 【程序 11 求不重复数字】
题目:有 1、 2、 3、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是 1、 2、 3、 4。组成所有的排列后再去 掉不满足条件的排
列。



package NoRepetitionNumber11;

public class NoRepetitionNumber {
public static void main(String[] args){
//题目:有 1、 2、 3、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int i,j,k; //i为百位,j为十位,k为个位
int n=4; //n为数字个数
int count=0;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
for(k=1;k<=n;k++){
if(i!=j&&i!=k&&j!=k){
count++;
System.out.println(i*100+j*10+k);
}
}
}
}
System.out.println(n+"个数字共能组成"+count+"种互不相同且无重复数字的三位数");
}
}

12 【程序 12 计算奖金】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于 10 万元时,奖金可提 10%;利润高于 10 万元,
低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的部分,可可提成 7.5%; 20 万到 40 万之间
时,高于 20 万元的部分,可提成 5%; 40 万到 60 万之间时高于 40 万元的部分,可提成 3%; 60 万到 100 万
之间时,高于 60 万元的部分,可提成 1.5%,高于 100 万元时,超过 100 万元的部分按 1%提成,从键盘输
入当月利润 I,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。


package CalculationBonus12;

import java.util.Scanner;

public class CalculationBonus {

public static void main(String[] args){

//题目:企业发放的奖金根据利润提成。利润(I)低于或等于 10 万元时,奖金可提 10%;利润高于 10 万元,

//低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的部分,可可提成 7.5%; 20 万到 40 万之间

//时,高于 20 万元的部分,可提成 5%; 40 万到 60 万之间时高于 40 万元的部分,可提成 3%; 60 万到 100 万

//之间时,高于 60 万元的部分,可提成 1.5%,高于 100 万元时,超过 100 万元的部分按 1%提成,从键盘输

//入当月利润 I,求应发放奖金总数?

System.out.println("请输入当月利润(万元):");

Scanner input = new Scanner(System.in);

long n = input.nextLong();

double sum=0;

if(n<=10){

sum = (n*0.1);

}else if(n<=20){

sum = (10*0.1+(n-10)*0.075);

}else if(n<=40){

sum = (10*0.1+10*0.075+(n-20)*0.05);

}else if(n<=60){

sum = (10*0.1+10*0.075+20*0.05+(n-40)*0.03);

}else if(n<=100){

sum = (10*0.1+10*0.075+20*0.05+20*0.03+(n-60)*0.015);

}else{

sum = (10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(n-100)*0.01);

}

System.out.println("奖金为:"+sum+"万元");

}

}

13 【程序 13 根据条件求数字】
题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后的结
果满足如下条件,即是结果。



package CalculateNumber13;

public class CalculateNumber {

public static void main(String[] args){

//题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?

double m,n;

for(double i=0;i<=10000;i++){ //从0遍历到10000

m = Math.sqrt(i+100);

n = Math.sqrt(i+168);

if((int)m==m && (int)n==n){ //若开方后的数字是整数

System.out.println(i);

}

}

}

}

14 【程序 14 求日期】
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以 3 月 5 日为例,应该先把前两个月的加起来,然后再加上 5 天即本年的第几天,特殊情况,
闰年且输入月份大于 3 时需考虑多加一天。


package CalculateDate14;

import java.util.Scanner;

public class CalculateDate {

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

public static void main(String[] args){

int sum=0,flag=0;

Scanner input = new Scanner(System.in);

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

int y = input.nextInt();

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

int m = input.nextInt();

System.out.println("请输入几号:");

int d = input.nextInt();

int[] mouth={0,31,28,31,30,31,30,31,31,30,31,30,31};

for(int i=0;i<m;i++){ //加上之前所有月份的天数

sum = sum+mouth[i];

}

sum += d; //加上当月的天数

if(y%400==0 || (y%100!=0 && y%4==0)) //判断若是闰年

flag=1;

if(flag==1 && m>2) //若该年是闰年且月份大于2月

sum++;

System.out.println(y+"年"+m+"月"+d+"日是这一年的第"+sum+"天");

}

}

15 【程序 15 排序】
题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,
然后再用 x 与 z 进行比较,如果 x>z 则将 x 与 z 的值进行交换,这样能使 x 最小。


package Sort15;

import java.util.Scanner;

public class Sort {

public static void main(String[] args){

//题目:输入三个整数 x,y,z,请把这三个数由小到大输出。

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

Scanner input=new Scanner(System.in);

int[] num =new int[3];

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

num[i]=input.nextInt();

}

/*

int num1,num2,num3;

num1=input.nextInt();

num2=input.nextInt();

num3=input.nextInt();

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

*/

int temp;

if(num[0]>num[1]){

temp=num[0];

num[0]=num[1];

num[1]=temp;

}

if(num[0]>num[2]){

temp=num[0];

num[0]=num[2];

num[2]=temp;

}

if(num[1]>num[2]){

temp=num[1];

num[1]=num[2];

num[2]=temp;

}

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

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

}

}

}

16 【程序 16 输入 9*9 表】
题目:输出 9*9 口诀。
程序分析:分行与列考虑,共 9 行 9 列, i 控制行, j 控制列 

package NineNineTasble16;

public class NineNineTasble {

//题目:输出 9*9 口诀。

public static void main(String[] args){

for(int i=1;i<=9;i++){

for(int j=1;j<=i;j++){

System.out.print(j+"*"+i+"="+i*j+\'\t\');

}

System.out.println();

}

}

}

17 【 程序 17 猴子吃桃问题】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又
将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想
再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。 

package MonkeyEatPeach17;

public class MonkeyEatPeach {

//题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又

//将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想

//再吃时,见只剩下一个桃子了。求第一天共摘了多少。

public static void main(String[] args){

int n=10;

int sum=1;

for(int i=1;i<n;i++){

sum = (sum+1)*2;

}

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

}

}

18 【程序 18 乒乓球赛】
题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。
有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。 

package PingPong18;

public class PingPong {

//题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。

//有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。

public static void main(String[] args){

char i,j,k;

for(i=\'x\';i<=\'z\';i++){

for(j=\'x\';j<=\'z\';j++){

for(k=\'x\';k<=\'z\';k++){

if(i==j||j==k||i==k||i==\'x\'||k==\'x\'||k==\'z\')

continue;

else

System.out.println("Rivals of a,b,c are "+i+","+j+","+k);

}

}

}

}

}

19 【程序 19 打印菱形图案】
题目:打印出如下图案(菱形)
    *
   ***
 ******
********
 ******
   ***
     *
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for 循环,第一层
控制行,第二层控制列。 

 

package PrintDiamond19;

public class PrintDiamond {

//题目:打印出如下图案(菱形)

public static void main(String[] args){

int lay;

lay = 7;//菱形的总长度

for(int i=1;i<=(lay+1)/2;i++){ //输出上半部分

for(int j=1;j<=(lay+1)/2-i;j++){ //输出空格

System.out.print(" ");

}

for(int k=1;k<=2*i-1;k++){ //输出*

System.out.print("*");

}

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

}

for(int i=(lay+1)/2+1;i<=lay;i++){ //输出下半部分

for(int j=1;j<=i-(lay+1)/2;j++){ //输出空格

System.out.print(" ");

}

for(int k=1;k<=lay-(i-(lay+1)/2)*2;k++){ //输出*

System.out.print("*");

}

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

}

}

}

20 【程序 20 求前 20 项之和】
题目:有一分数序列: 2/1, 3/2, 5/3, 8/5, 13/8, 21/13...求出这个数列的前 20 项之和。
程序分析:请抓住分子与分母的变化规律。 

 

package TopSum20;

public class TopSum {

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

public static void main(String[] args){

int n=20; //前20项

double sum=0; //和

for(int i=1;i<=n;i++){

sum = sum + (double)fib(i+2)/fib(i+1);

}

System.out.print(sum);

}

private static int fib(int n){ //斐波那契数列

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

return 1;

else

return fib(n-1)+fib(n-2);

}

}

21 【程序 21 求阶乘】
题目:求 1+2!+3!+...+20!的和
程序分析:此程序只是把累加变成了累乘。 

package Factorial21;

public class Factorial {

//题目:求 1+2!+3!+...+20!的和

public static void main(String[] args){

int n=20; //n个阶乘和

int sum=0,fac; //fac为阶乘,sum为总和

for(int i=1;i<=n;i++){

fac=1;

for(int j=1;j<=i;j++){

fac=j*fac;

}

sum += fac;

}

System.out.println(sum);

}

}

22 【程序 22 递归求阶乘】
题目:利用递归方法求 5!。
程序分析:递归公式: fn=fn_1*4! 

package Factorial22;

public class Factorial {

//题目:利用递归方法求 5!。

public static void main(String[] args){

int n=5;

System.out.println(Fac(n));

}

private static int Fac(int n){

if(n>0)

return Fac(n-1)*n;

else

return 1;

}

}

23 【程序 23 求岁数】
题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个
人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他
说是 10 岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁
数,依次类推,推到第一人( 10 岁) ,再往回推。 

package GetAge23;

public class GetAge {

//题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比第 3 个

//人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后问第一个人,他

//说是 10 岁。请问第五个人多大?

public static void main(String[] args){

int n=5; //n为第几个人

System.out.print(Age(n));

}

private static int Age(int n){

if(n==1)

return 10;

else

return Age(n-1)+2;

}

}

24 【程序 24 根据输入求输出】
题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 

 

package GetInToOut24;

import java.util.Scanner;

public class GerInToOut {

//题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

public static void main(String[] args){

System.out.println("请输入一个不多于5位的正整数:");

Scanner input = new Scanner(System.in);

int n = input.nextInt();

System.out.println("它是"+GetBit(n)+"位数");

System.out.println("逆序为"+GetInvert(n));

}

private static int GetBit(int n){ //得到n的位数

if(n/10000>0){

return 5;

}else if(n/1000>0){

return 4;

}else if(n/100>0){

return 3;

}else if(n/10>0){

return 2;

}else{

return 1;

}

}

private static int GetInvert(int n){ //得到n的逆序

int b = GetBit(n);

int out=0;

if(b==1){

out=n;

}else if(b==2){

out=(n%10)*10+n/10;

}else if(b==3){

out=(n%10)*100+(n/10%10)*10+n/100;

}else if(b==4){

out=(n%10)*1000+(n%100/10)*100+(n/100%10)*10+n/1000;

}else{

out=(n%10)*10000+(n%100/10)*1000+(n/100%10)*100+(n/1000%10)*10+n/10000;

}

return out;

}

}

25 【程序 25 求回文数】
题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。  

 

package PalindromeNumber25;

import java.util.Scanner;

public class PalindromeNumber {

//题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。

public static void main(String[] args){

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

Scanner input = new Scanner(System.in);

int n = input.nextInt();

if(IsPalindrome(n))

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

else

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

}

private static boolean IsPalindrome(int n){

if(n/10000==n%10 && (n/1000%10)==(n%100/10)) //万位=个位,千位=十位

return true;

else

return false;

}

}

26 【程序 26 求星期】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if 语句判断第二个字母。 

方法一:利用map

import java.util.Scanner;

public class GetWeek {

//题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。

public static void main(String[] args){

Map<String,String> map = new HashMap<String,String>();

map.put("m","星期一");

map.put("tu","星期二");

map.put("w","星期三");

map.put("th","星期四");

map.put("f","星期五");

map.put("sa","星期六");

map.put("su","星期日");

Scanner input = new Scanner(System.in);

System.out.println("请输入星期几第一个字母:");

String str= input.next();

//方法二

if(map.get(str)==null){

System.out.println("目前无法判断,请输入第二个字母:");

str= str + input.next();

if(map.get(str)==null){

System.out.println("输入字母匹配不到任意天,请检查。");

}else

System.out.println(map.get(str));

}else

System.out.println(map.get(str));

}

  

package GetWeek26;

import java.io.IOException;

import java.util.Scanner;

public class GetWeek {

//题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.println("请输入星期几第一个字母:");

String str= input.next();

char a = str.charAt(0);

/*

char a=\' \';

try{

a = (char)System.in.read();

}catch (IOException e){}

*/

if(a==\'M\'||a==\'m\'){

System.out.println("星期一");

}else if(a==\'W\'||a==\'w\'){

System.out.println("星期三");

}else if(a==\'F\'||a==\'f\'){

System.out.println("星期五");

}else if(a==\'T\'||a==\'t\'||a==\'S\'||a==\'s\'){

System.out.println("目前无法判断,请输入第二个字母:");

String str1= input.next();

char b= str1.charAt(0);

/*

char b=\' \';

try{

b = (char)System.in.read();

}catch (IOException e){}

*/

if(a==\'T\'||a==\'t\'){

if(b==\'U\'||b==\'u\'){

System.out.println("星期二");

}else if(b==\'H\'||b==\'h\'){

System.out.println("星期四");

}else{

System.out.println("输入字母匹配不到任意天,请检查。");

}

}

if(a==\'S\'||a==\'s\'){

if(b==\'U\'||b==\'u\'){

System.out.println("星期日");

}else if(b==\'A\'||b==\'a\'){

System.out.println("星期六");

}else{

System.out.println("输入字母匹配不到任意天,请检查。");

}

}

}else{

System.out.println("输入字母匹配不到任意天,请检查。");

}

}

}

 其中注释部分写法有问题,无法正确读入b。原因是b会读入第一次敲得的回车导致结果出错。不知如何解决?

 

27 【程序 27 求素数】
题目:求 100 之内的素数 

package FindPrimeNumber27;

public class FindPrimeNumber {

//并输出100以内所有素数。

public static void main(String[] args){

int count=0; //记录素数的个数

int flag; //flag为1则不是素数

int i,j; //用于for循环

System.out.println("100以内的素数为:");

for(i=2;i<=100;i++){

int max = (int) Math.sqrt(i);

flag=0;

for(j=2;j<=max;j++){

if(i%j==0){

flag=1;

break;

}

}

if(flag==0){

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

count++;

}

}

System.out.println("共有"+count+"个素数");

}

}

 

28 【程序 28 排序算法】
题目:对 10 个数进行排序
程序分析:可以利用选择法,即从后 9 个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即
用第二个元素与后 8 个进行比较,并进行交换。 

package SelectSort28;

import java.util.Scanner;

public class SelectSort {

//题目:对 10 个数进行排序(选择排序)

public static void main(String[] args){

Scanner input = new Scanner(System.in);

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

int[] n = new int[10];

for(int i=0;i<n.length;i++){ //读入10个数

n[i] = input.nextInt();

}

int min,p=0,temp; //min记录每趟最小的值,p记录最小值下表,temp用于交换

for(int j=0;j<n.length-1;j++){ //循环n-1次

min=n[j];

for(int k=j+1;k<n.length;k++){ //从j+1开始遍历寻找最小值

if(n[k]<min){

min=n[k];

p=k;

}

}

if(p>j){ //存在n[j]后的数比它小,则交换两者

temp=n[j];

n[j]=n[p];

n[p]=temp;

p=0;

}

}

for(int i=0;i<n.length;i++){ //输出10个数

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

}

}

}

 29 【程序 29 求矩阵对角线之和】
题目:求一个 3*3 矩阵对角线元素之和
程序分析:利用双重 for 循环控制输入二维数组,再将 a[i][i]累加后输出。



package RectangleMatrix29;

import java.util.Scanner;

public class RectangleMatrix {

//题目:求一个 3*3 矩阵对角线元素之和

public static void main(String[] args){

System.out.println("请输入一个 3*3 矩阵(行优先)");

Scanner input = new Scanner(System.in);

int[][] n = new int[3][3];

for(int i=0;i<3;i++){

for(int j=0;j<3;j++){

n[i][j] = input.nextInt();

}

}

int sum=0;

for(int k=0;k<3;k++){

sum += n[k][k];

}

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

}

}

30 【程序 30 插入数字】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,
依次后移一个位置。


package InsertNumber30;

import java.util.ArrayList;

import java.util.Scanner;

public class InsertNumber {

//题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。(递增)

public static void main(String[] args){

ArrayList List = new ArrayList();

// add()是添加一个新的元素, remove()删除一个元素, size()获得ArrayList的长度。

for(int i=0;i<10;i++){ //初始化数组

List.add(i);

}

System.out.println("初始数组为"+List);

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

Scanner input = new Scanner(System.in);

int n = input.nextInt();

int length=List.size();

// if(n>= (int) List.get(length-1)){

// List.add(n);

// }

for(int j=length-1;j>=0;j--){

if(n < (int) List.get(j))

continue;

else{

List.add(j+1,n);

break;

}

}

System.out.println("插入"+n+"后数组为"+List);

}

}

31 【程序 31 数组逆序】
题目:将一个数组逆序输出。
程序分析:用第一个与最后一个交换。



package InvertedSequence31;

public class InvertedSequence {

//题目:将一个数组逆序输出。

public static void main(String[] args) {

int lengh=10;

int[] n = new int[lengh];

System.out.print("原数组为:");

for(int i=0,j=0;j<lengh;i+=2,j++){ //初始化数组

n[j]=i;

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

}

int temp;

for(int k=0;k<=(n.length-1)/2;k++){

//交换前后两值

temp = n[k];

n[k] = n[n.length-1-k];

n[n.length-1-k] = temp;

}

System.out.println();

System.out.print("逆序数组为:");

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

System.out.print(n[j]+" "); //输出数组

}

}

}

32 【程序 32 左移右移】
题目:取一个整数 a 从右端开始的 4~7 位。
程序分析:可以这样考虑:
(1)先使 a 右移 4 位。
(2)设置一个低 4 位全为 1,其余全为 0 的数。可用~(~0<<4)
(3)将上面二者进行&运算。



package LMoveRMove32;

import java.util.Scanner;

public class LMoveRMove {

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

public static void main(String[] args){

System.out.println("请输入一个不小于7位的数:");

Scanner input = new Scanner(System.in);

long a = input.nextLong(); //读入a

String str = Long.toString(a); //转换成String

char[] n = str.toCharArray(); //转换成char数组

int i = n.length;

if(i<7){

System.out.println("输入错误!");

}else{

for(int j=3;j>=0;j--)

System.out.print(n[i-j-4]);

}

}

}

33 【程序 33 杨辉三角】
题目:打印出杨辉三角形(要求打印出 10 行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1



package YangHuiTriangle33;

public class YangHuiTriangle {

//题目:打印出杨辉三角形(要求打印出 10 行如下图)

public static void main(String[] args){

int n=10;

int[][] HY= new int[n][n];

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

//将杨辉三角存入HY二维数组

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

if(j==0){

HY[i][j]=1; //第一列的值均为1

}else{

HY[i][j]=HY[i-1][j]+HY[i-1][j-1]; //每一个值均为上一行同一列的值+上一行左一列的值

}

}

}

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

//输出杨辉三角

for(int j=1 ;j<n-i;j++){

System.out.print(" ");

}

for(int k=0;k<n;k++){

if(HY[i][k]>0){

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

}

}

System.out.println();

}

}

}

34 【程序 34 三个数排序】
题目:输入 3 个数 a,b,c,按大小顺序输出。
程序分析:利用指针方法。



package Sort34;

import java.util.Scanner;

public class Sort {

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

public static void main(String[] args){

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

Scanner input=new Scanner(System.in);

int a = input.nextInt();

int b = input.nextInt();

int c = input.nextInt();

int max=a>b?(a>c?a:c):(b>c?b:c);

int medium=a>b?(a<c?a:c):(b<c?b:c);

int min=a<b?(a<c?a:c):(b<c?b:c);

System.out.print(max+" "+medium+" "+min);

}

}

35 【程序 35 最大最小交换】
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。



package ChangeMaxMin35;

import java.util.Scanner;

public class ChangeMaxMin {

//题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

public static void main(String[] args){

//读入一个不确定长度的一维数组

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

Scanner input = new Scanner(System.in);

String str = input.nextLine(); //读入一行string

String[] s = str.split("\\s"); //根据空格进行分割

int[] n = new int[s.length];

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

n[i] = Integer.parseInt(s[i]); //将string转为int型

}

int max=0,min=0; //记录最大值和最小值得下标

for(int j=0;j<n.length;j++){ //遍历数组,找到最大值和最小值下标

if(n[j]>n[max]){

max=j;

}

if(n[j]<n[min]){

min=j;

}

}

int temp;

//交换时,注意最大最小值出现在两端的情况

if(max>0){ //若最大值不是第一个,则交换

temp=n[0];

n[0]=n[max];

n[max]=temp;

}

if(min==0){ //若最小值是第一个值,则需更新min值,因为最大值已经与第一个值交换。

min=max;

}

if(min<n.length-1){ //若最小值不是最后一个,则交换

temp=n[n.length-1];

n[n.length-1]=n[min];

n[min]=temp;

}

for(int i=0;i<n.length;i++){ //输出交换后的数组

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

}

}

}

36 【程序 36 移动位置】
题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数


package MoveNumber36;

import java.util.Scanner;

public class MoveNumber {

//题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.println("请输入若干个整数:");

String str = input.nextLine();

String[] s = str.split("\\s");

int n = s.length;

int[] arr = new int[n];

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

arr[i] = Integer.parseInt(s[i]);

}

System.out.println("请输入移动的位数:");

int m = input.nextInt();

if(m>n){

System.out.println("移动的位数过大超过数组长度!");

}

//辅助数组b,将数组arr的前n-m为存入b中

int[] b = new int[n-m];

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

b[j] = arr[j];

}

for(int k=0;k<m;k++){ //后m位数字前移

arr[k]=arr[k+n-m];

}

for(int p=0;p<n-m;p++){ //前n-m位从b中移回arr中

arr[p+m]=b[p];

}

for(int i=0;i<n;i++){ //输出移动后的数组

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

}

}

}

37 【程序 37 报数】
题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,
问最后留下的是原来第几号的那位。


package CountOff37;

import java.util.ArrayList;

import java.util.Scanner;

public class CountOff {

//题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,

//问最后留下的是原来第几号的那位。

public static void main(String[] args){

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

Scanner input = new Scanner(System.in);

int n = input.nextInt();

ArrayList list= new ArrayList(); //定义动态数组

for(int i=1;i<=n;i++){ //将号码存入动态数组list

list.add(i);

}

System.out.println("初始编号为:"+list);

int length=list.size();

for(int i=1,j=0;length>1;i++,j=(j+1)%length){

//i从1-3循环计数,j为动态数组的下标,同步从0一直增加

if(i==3){ //数到3时,移除对应的人,同时从1重新数。

list.remove(j);

length = list.size();

i=1;

}

}

System.out.println("最后剩下的人是"+list.get(0));

}

}

 

38 【程序 38 求字符串长度】
题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。

package LengthOfString38;

import java.util.Scanner;

public class LengthOfString {

//题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。

public static void main(String[] args){

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

Scanner input = new Scanner(System.in);

String str = input.nextLine();

System.out.println("该字符串的长度为"+getLength(str));

}

private static int getLength(String str){

return str.length();

}

}

 

39 【程序 39 分数累加】
题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数
1/1+1/3+...+1/n

package SumOfFraction39;

import java.util.Scanner;

public class SumOfFraction {

//题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数

//1/1+1/3+...+1/n

public static void main(String[] args){

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

Scanner input = new Scanner(System.in);

double n = input.nextDouble();

System.out.print("分数之和为:");

if(n%2==0){ //n为偶数

System.out.println(even(n));

}else{ //n为奇数

System.out.println(odd(n));

}

}

private static double even(double n){

double sum = 0;

for(double i=2;i<=n;i+=2){

sum += 1/i;

}

return sum;

}

private static double odd(double n){

double sum = 0;

for(double i=1;i<=n;i+=2){

sum += 1/i;

}

return sum;

}

}

 

40 【程序 40 字符串排序】
题目:字符串排序。

package SortOfString40;

import java.util.Scanner;

public class SortOfString {

//题目:字符串排序。

public static void main(String[] args) {

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

Scanner input = new Scanner(System.in);

String str = input.nextLine();

System.out.println("排序后的字符串为:"+sort(str));

}

private static String sort(String str){

char[] c = str.toCharArray();

int L =c.length;

//采用冒泡排序

boolean flag;

char temp;

for(int i=0;i<L-1;i++){

flag=false;

for(int j=L-1;j>0;j--){

if(c[j-1]>c[j]){

temp=c[j];

c[j]=c[j-1];

c[j-1]=temp;

flag=true;

}

}

if(flag==false){

break;

}

}

//再次将字符数组转换为字符串,也可以直接利用String.valueOf(c)转换

String str1 = new String(c);

return str1;

// String str2 = String.valueOf(c);

// return str2;

}

}

41 【程序 41 猴子分桃】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把
多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的
一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?



package MonkeySplitPeach40;

public class MonkeySplitPeach {

//题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把

//多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的

//一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

public static void main(String[] args) {

int n=5; //总共5只猴子

int i; //用于for循环

int x; //最后一个猴子分到的数目

double sum; //每一轮分配前的数目

for(x=1;;x++){ //x为最后一个猴子分到的数量,从1开始遍历

sum = 5*x+1; //最后一只猴子分配前的总数

for(i=1;i<n;i++){

sum = (5.0/4.0)*sum+1; //上一轮分配前的总数

if((int)sum != sum){ //若该数不是整数

i=1;

break;

}

}

if(i==n)

break;

}

System.out.println("最后一个猴子分到的数目:"+x);

System.out.println("海滩上原来最少有"+(int)sum+"个桃子");

}

}

42 【程序 42 求数字】
题目: 809*??=800*??+9*??+1
其中??代表的两位数,8*??的结果为两位数, 9*??的结果为 3 位数。求??代表的两位数,及 809*??后的结
果。



package FindNumber42;

public class FindNumber {

//题目: 809*??=800*??+9*??+1

public static void main(String[] args) {

int x=0,i;

boolean flag=false;

for(i=10;i<100;i++){

if(8*i<100 && 9*i>99 ){

if(809*i==800*i+9*i+1){

x=i;

flag=true;

break;

}

}

}

if (flag){

System.out.println("??是"+x);

System.out.println("809*??="+809*x);

}else{

System.out.println("无解");

}

}

}

疑问:这个等式显然无解。

43 【程序 43 求奇数个数】
题目:求 0—7 所能组成的奇数个数。


package OddNumber43;

public class OddNumber {

//题目:求 0—7 所能组成的奇数个数。

public static void main(String[] args) {

sum1(8);

sum2(8);

}

private static void sum1(int n){

//可重复

int sum = 0,total = 0;

for(int i=1; i<=n; i++){ //最大位数为8位

//4*7*8*8*8*8*8*8

if(i == 1 ){

total = 4; // 1,3,5,7

}else if(i ==2){

total = total*7;

}else{

total *= 8;

}

System.out.println("0~7组成" + i + "位数,有:" + total + "个");

sum += total;

}

System.out.println("总计为:" + sum);

}

private static void sum2(int n){

//不可重复

int sum = 0,total = 0;

for(int i=1; i<=n; i++){ //最大位数为8位

//4*6*6*5*4*3*2*1

if(i == 1 ){

total = 4; // 1,3,5,7

}else if(i ==2){

total = total*6;

}else{

total *= (n+1-i);

}

System.out.println("0~7组成" + i + "位数,有:" + total + "个");

sum += total;

}

System.out.println("总计为:" + sum);

}

}

疑问:不是很懂题目意思??

 

44 【程序 44 偶数的素数和】
题目:一个偶数总能表示为两个素数之和。

package EvenEqualSumOfPrime44;

import java.util.Scanner;

import java.util.ArrayList;

public class EvenEqualSumOfPrime {

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

public static void main(String[] args) {

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

Scanner input = new Scanner(System.in);

int n = input.nextInt();

//用动态数组x,y记录分解的素数,因为有多种可能

ArrayList x = new ArrayList();

ArrayList y = new ArrayList();

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

if(IsPrime(i)){

int j=n-i;

if(IsPrime(j)){ //符合条件则加入数组x,y;

x.add(i);

y.add(j);

}

}

}

for(int k=0;k<x.size();k++){ //输出结果

System.out.println(n+"="+x.get(k)+"+"+y.get(k));

}

}

private static boolean IsPrime(int n){ //判断n是否是素数

int max = (int) Math.sqrt(n);

int flag=0;

for(int j=2;j<=max;j++){

if(n%j==0){

flag=1;

break;

}

}

if(flag==0){

return true;

}

return false;

}

}

 

45 【程序 45 被 9 整除】
题目:判断一个素数能被几个 9 整除


package DivideByNine45;

import java.util.Scanner;

public class DivideByNine {

public static void main(String[] args) {

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

Scanner input = new Scanner(System.in);

int n = input.nextInt();

if(IsPrime(n)==false){

System.out.println("您输入的数不是素数,请重新输入");

}else{

if(count(n)==0){

System.out.println(n+"不能被9整除");

}else{

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

}

}

}

private static boolean IsPrime(int n){ //判断n是否是素数

int max = (int) Math.sqrt(n);

int flag=0;

for(int j=2;j<=max;j++){

if(n%j==0){

flag=1;

break;

}

}

if(flag==0){

return true;

}

return false;

}

private static int count(int n){ //被9整除的个数

int count=0;

while(n%9==0){

n=n/9;

count++;

}

return count;

}

} 

疑问:素数怎么可能被9整除??

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

package ConnectTwoString46;

import java.util.Scanner;

public class ConnectTwoString {

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

public static void main(String[] args) {

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

Scanner input = new Scanner(System.in);

//读入两个字符串

String str1 = input.nextLine();

String str2 = input.nextLine();

//字符串转换为字符数组

char[] c1 = str1.toCharArray();

char[] c2 = str2.toCharArray();

char[] c = new char[c1.length+c2.length]; //用于存放连接的字符数组

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

c[i]=c1[i];

}

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

c[j+c1.length]=c2[j];

}

//将连接后的新字符数组转换成字符串,输出

String str = new String(c);

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

}

}

47 【程序 47 打印星号】
题目:读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。


package PrintStar47;

import java.util.Scanner;

public class PrintStar {

//题目:读取 7 个数( 1—50)的整数值,每读取一个值,程序打印出该值个数的*。

public static void main(String[] args) {

System.out.println("请输入七个(1--50)整数:");

Scanner input = new Scanner(System.in);

int n;

for(int i=0;i<7;i++){

n = input.nextInt();

for(int j=0;j<n;j++){

System.out.print("*");

}

System.out.println();

}

}

}

48 【程序 48 加密】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密
规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交
换,第二位和第三位交换。


package Encryption48;

import java.util.Scanner;

public class Encryption {

//题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密

//规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交

//换,第二位和第三位交换。

public static void main(String[] args) {

System.out.println("请要传递的四位整数:");

Scanner input = new Scanner(System.in);

int n = input.nextInt();

int[] a = {n/1000,n/100%10,n%100/10,n%100}; //将n的各位存入a数组

for(int i=0;i<a.length;i++){

//加密

a[i] = (a[i]+5)%10;

}

//交换一四位,二三位

int temp;

temp=a[0];

a[0]=a[3];

a[3]=temp;

temp=a[1];

a[1]=a[2];

a[2]=temp;

//输出加密后的数字

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

//int n1=0;

for(int j=0;j<a.length;j++){

//n1 = n1 + a[j]*(int)Math.pow(10,a.length-1-j);

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

}

//System.out.println(n1);

}

}

49 【程序 49 子串出现的个数】
题目:计算字符串中子串出现的次数


package SubstringNumber49;

import java.util.Scanner;

public class SubstringNumber {

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

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

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

String str1= input.nextLine();

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

String str2= input.nextLine();

System.out.println("字符串中子串出现的次数为:"+count(str1,str2));

System.out.println("字符串中子串出现的次数为:"+count2(str1,str2));

}

//方法一:采用split

private static int count(String str1,String str2){ //str1为整串,str2位子串

str1 = " "+str1+" "; //母串两端补空格,防止子串出现在两端时计数出错。

String[] c = str1.split(str2);

return c.length-1;

}

//方法二:利用indexOf

private static int count2(String str1,String str2){ //str1为整串,str2位子串

int count=0;

int d=0;

if(str1.contains(str2)==false){

count=0;

}else{

while((d=str1.indexOf(str2,d))!=-1){ //匹配到子串

str1 = str1.substring(d+str2.length()); //得到匹配子串位置后面的字符串

count++;

}

}

return count;

}

}

50 【程序 50 文件 IO】
题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),
计算出平均成绩, 将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。


package FileIO50;

import java.io.*;

public class FileIO {

//题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),

//计算出平均成绩, 将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

//定义学生模型

String[] number = new String[5];

String[] name = new String[5];

float[][] grade = new float[5][3];

float[] sum = new float[5];

public static void main(String[] args) {

FileIO stud = new FileIO();

try {

stud.input();

stud.output();

}catch(IOException e){}

}

//输入学号、姓名、成绩

void input() throws IOException{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try{

for(int i=0;i<5;i++){

System.out.print("请输入学号:");

number[i] = br.readLine();

System.out.print("请输入姓名:");

name[i] = br.readLine();

for(int j=0;j<3;j++){

System.out.print("请输入第"+(j+1)+"门课成绩:");

grade[i][j] = Integer.parseInt(br.readLine());

}

System.out.println();

sum[i] = grade[i][0]+grade[i][1]+grade[i][2];

}

}catch(NumberFormatException e){

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

}

}

//输出文件

void output() throws IOException{

FileWriter fw = new FileWriter("stud.txt");

BufferedWriter bw = new BufferedWriter(fw);

bw.write("学号"+"\t"+"姓名"+"\t"+"成绩1"+"\t"+"成绩2 "+"\t"+"成绩3 "+"\t"+"平均成绩");

bw.newLine();

for(int i=0;i<5;i++){

bw.write(number[i]+"\t");

bw.write(" "+name[i]+"\t");

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

bw.write(" "+grade[i][j]+"\t");

bw.write(" "+(sum[i]/3)+"\t");

bw.newLine();

}

bw.close();

}

}

  

 

 

 

 

}

以上是 JAVA 基础编程练习题 的全部内容, 来源链接: utcz.com/z/390204.html

回到顶部