JAVA编程题目(含解答)分析

JAVA编程题目(含解答)分析
JAVA编程题目(含解答)分析

【程序1】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

import java.util.Scanner;

public class rabbit {

public static void main(String[] args) {

int number = 1, month;

int tmp1 = 1, tmp2 = 1;

Scanner sc = new Scanner(System.in);

System.out.println("请输入第几个月:");

month = sc.nextInt();

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

if (i <= 2) number = 1;

else { number = tmp1 + tmp2;// 前两个月兔子数之和

tmp2 = tmp1;// 前第二个月

tmp1 = number;// 前一个月 }

System.out.println("第" + i + "个月的兔子数是:" + number);

【程序2】

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

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数。

public class Demo01 {

public static void main(String[] args) {

int count = 0;

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

boolean b = false;

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

{

if(i % j == 0) { b = false; break;

}

else

{

b = true;

}

}

if(b == true) {count ++;System.out.println(i );

}

}

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

}

}

【程序3】

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。public class DaffodilsNumber {

/**

* 【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:

* 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:

* 利用for循环控制100-999个数,每个数分解出个位,十位,百位。

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

DaffodilNumber dn;

int ct = 0;

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

dn = new DaffodilNumber(i);

//System.out.println(dn);

if (dn.isDaffodilNumber()) {

ct++;

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

}

}

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

System.out.println("100~999之间一共有:" + ct + "个水仙花数。");

}

}

class DaffodilNumber {

private int bw;

private int sw;

private int gw;

private int num;

public DaffodilNumber(int num) {

this.num = num;

this.bw = num / 100;

this.sw = (num-bw*100)/10;

this.gw = num % 10;

}

public boolean isDaffodilNumber() {

if (num == bw * bw * bw + sw * sw * sw + gw * gw * gw)

return true;

else

return false;

}

public String toString() {

return bw + "*" + bw + "*" + bw + "+" + sw + "*" + sw + "*" + sw + "+"

+ gw + "*" + gw + "*" + gw;

}

}

【程序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;

public class PrimeSplit {

/**

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

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

int n;

while (true) {

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

n = sc.nextInt();

if (n > 1)

break;

}

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

int i = 2;

String str = "";

while (i <= n) {

if (n % i == 0 && isPrime(i)) {

str += "*" + i;

n /= i;

i = 2;

continue;

}

i++;

}

System.out.println(str.substring(1));

}

private static boolean isPrime(int n) {

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

if (n % i == 0) {

return false;

}

}

return true;

}

}

【程序5】

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

1.程序分析:(a>b)?a:b这是条件运算符的基本例子。

import java.util.Scanner;

public class PerformanceRating {

/**

* 【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

* 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

float f;

while (true) {

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

f = sc.nextFloat();

if (f >= 0 && f <= 100)

break;

}

System.out.print("成绩为:" + f + "的,其等级是:");

System.out.println((f >= 90 ? "A" : (f < 60 ? "C" : "B")) + "。");

}

}

【程序6】

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

1.程序分析:利用辗除法。

import java.util.Scanner;

public class DivisorMultiple {

/**

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

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int m, n, c;

Scanner sc = new Scanner(System.in);

while (true) {

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

m = sc.nextInt();

if (m > 0)

break;

}

while (true) {

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

n = sc.nextInt();

if (n > 0)

break;

}

c = gcd(m, n);

System.out.println("[" + m + "," + n + "] = " + c);

System.out.println("(" + m + "," + n + ") = " + m * n / c);

}

private static int gcd(int a, int b) {//使用辗转相除法

int r=a%b;

if(r==0){

return b;

}else{

return gcd(b,r);

}

}

}

法二:

import java.util.Scanner;

public class MultipleDivisor {

/**

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

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int m, n, c;

Scanner sc = new Scanner(System.in);

while (true) {

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

m = sc.nextInt();

if (m > 0)

break;

}

while (true) {

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

n = sc.nextInt();

if (n > 0)

break;

}

c = gcd(m, n);

System.out.println("[" + m + "," + n + "] = " + c);

System.out.println("(" + m + "," + n + ") = " + m * n / c);

}

private static int gcd(int a, int b) {//使用辗转相减法完成的if (a < b) {

int tmp;

tmp = a;

a = b;

b = tmp;

}

if (a % b == 0)

return b;

else

return gcd(b, a - b);

}

}

【程序7】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.程序分析:利用while语句,条件为输入的字符不为'\n'.

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class JudgeBlankLetterEtc {

/**

* 【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

* 1.程序分析:利用while语句,条件为输入的字符不为'\n'.

*

* @throws Exception

*/

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

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

System.out.println("请输入一串字符串(可包含字母、数字、空格及其它字符):");

StringBuffer sb = new StringBuffer(br.readLine());

int letterCount = 0;

int blankCount = 0;

int numberCount = 0;

int otherCount = 0;

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

char c = sb.charAt(i);

if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) {

letterCount++;

} else if ('0' <= c && c <= '9') {

numberCount++;

} else if (' ' == c) {

blankCount++;

} else {

otherCount++;

}

}

System.out.println("字符串:" + sb + "中,");

System.out.println("字母:" + letterCount);

System.out.println("数字:" + numberCount);

System.out.println("空格:" + blankCount);

System.out.println("其它字符:" + otherCount);

}

}

法二:

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class JudgeLetterBlankNumberEtc {

/**

* @param args

* @throws Exception

*/

@SuppressWarnings("deprecation")

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

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

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String str = br.readLine();

int lc = 0;

int nc = 0;

int bc = 0;

int oc = 0;

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

char ch = str.charAt(i);

if (Character.isLetter(ch)) {

lc++;

} else if (Character.isDigit(ch)) {

nc++;

} else if (Character.isSpace(ch)) {

bc++;

} else {

oc++;

}

}

System.out.println("字符串\"" + str + "\"中包含的:");

System.out.println("字母有:" + lc + "个;");

System.out.println("数字有:" + nc + "个;");

System.out.println("空格有:" + bc + "个;");

System.out.println("其它字符有:" + oc + "个;");

}

}

【程序8】

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

2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

1.程序分析:关键是计算出每一项的值。

import java.util.Scanner;

public class CycleNumberAdd {

/**

* 【程序8】

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

2+22+222+2222+22222(此时共有5个数相加

* ),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

int m, n;

while (true) {

System.out.println("请输入一个1~9之间的一个数字:");

m = sc.nextInt();

if (m > 0 && m < 10)

break;

}

while (true) {

System.out.println("请输入循环次数(>1,<19):");

n = sc.nextInt();

if (n > 1 && n < 19)

break;

}

long sum = m;

long t = m;

String s = "" + m;

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

t = 10 * t + m;

s += " + " + t;

sum += t;

}

System.out.println(s + " = " + sum);

}

}

【程序9】

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

public class PerfectNumber {

/**

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

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

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

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

String str = "1";

int sum = 1;

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

if (i % j == 0) {

sum += j;

str += " + " + j;

}

}

if (i == sum) {

System.out.println(sum + " = " + str);

}

}

}

}

【程序10】

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

public class BallBounce {

/**

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

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

double high = 100.0;

double sum = 0.0;

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

sum += high;

high /= 2;

}

System.out.println("小球10后的经过的距离为:" + sum + "米。");

System.out.println("小球第10次落地后,再弹起的高度为:"+ high + "米。");

}

}

【程序11】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

public class ArrangementNumber {

/**

* 【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

* 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

int ct = 0;

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

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

if (i == j)

continue;

for (int k = 1; k < 5; k++) {

if (j == k || i == k)

continue;

ct++;

System.out.print((i * 100 + j * 10 + k) + " ");

}

}

}

System.out.println("\n共有:" + ct + "个不同的三位数。");

}

}

【程序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,求应发放奖金总数?

1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。import java.util.Scanner;

public class PrizeCommision {

/**

* 【程序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,求应发放奖金总数?

* 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

long profit;

long prize;

Scanner sc=new Scanner(System.in);

while(true){

System.out.println("请输入利润:");

profit=sc.nextLong();

if(profit>0)break;

}

if(profit<=100000){

prize=(long) (profit*.1);

}else if(profit<=200000){

prize=(long) (100000*.1+(profit-100000)*.075);

}else if(profit<=400000){

prize=(long) (100000*.1+100000*.075+(profit-200000)*.05);

}else if(profit<=600000){

prize=(long)

(100000*.1+100000*.075+200000*.05+(profit-400000)*.03);

}else if(profit<=1000000){

prize=(long)

(100000*.1+100000*.075+200000*.05+200000*.03+(profit-600000)*.015);

}else {

prize=(long)

(100000*.1+100000*.075+200000*.05+200000*.03+400000*.015+(profit-1000 000)*.01);

}

System.out.println("你应该得到的奖金为:"+prize);

相关主题
相关文档
最新文档