java习题集,Java练习题集

1、古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三 个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?这是一个菲波拉契数列问题

public class No1 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.print("请输入要计算的月份数:");

int N = sc.nextInt();//月份

int[] sum = new int[N];

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

if(i == 1 || i == 0){

sum[i] = 1;

System.out.println("第"+ (i+1) +"个月有"+ sum[i] +"对兔子");

}

else{

sum[i] = sum[i - 1] + sum[i - 2];

System.out.println("第"+ (i+1) +"个月有"+ sum[i] +"对兔子");

}

}

}

}

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

public static void main(String[] args) {

int count = 0;

int j = 0;

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

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

// 如果j能被i整除就跳出循环

if (i % j == 0)

break;

}

//判断循环是否提前跳出,如果j

if ( j >= i) {

count++;

System.out.println("素数为:"+ i);

}

}

System.out.println("101-200之间有"+ count +"个素数");

}

}

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

public class No3 {

public static void main(String[] args) {

System.out.print("水仙花数: ");

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

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

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

int num = i * 100 + j * 10 + k;

if(num == i*i*i + j*j*j + k*k*k){

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

}

}

}

}

}

}

4、将一个正整数分解质因数。例如:输入 90,打印出 90=233*5。 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:

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

*(2)如果 n <> k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数 你n,重复执行第一步。

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

public class No4 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int N = sc.nextInt();

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

//循环判断

for (int k = 2; k <= N; k++) {

while (N != k) {

if (N % k == 0) {

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

N = N / k;

} else {

break;

}

}

}

System.out.print(N); // 打印出最后一个数

}

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

public class No5 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while(true){

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

int num = sc.nextInt();

if(num > 100 || num < 0){

System.out.println("数据有误,请输入0—100的数据。");

}

else{

String grade = (num >= 90) ? "A" : (num >= 60) ? "B" : "C";

System.out.println(grade);

}

}

}

}

6、输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 /*在循环中,只要除数不等于 0,用较大数除以较小的数,将小的一个数作为下一轮循环的 大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为 0,返回较大 的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。 /

public class No6 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入两个正整数 m 和 n");

int m = sc.nextInt();

int n = sc.nextInt();

int max = run(m,n);

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

int min = m * n / max;

System.out.println("最小公倍数为:" + min);

}

public static int run(int m, int n) {

//判断大小交换位置 使m > n

if (m < n) {

int t = m;

m = n;

n = t;

}

while (n != 0) {

//如果两个数相等 就返回它本身

if (m == n)

return m;

else {

int k = m % n;

m = n;

n = k;

}

}

return m;

}

}

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

public class No7 {

public static void main(String[] args){

System.out.println("请输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数");

tiqv();

}

private static void tiqv() {

Scanner sc = new Scanner(System.in);

String str = sc.nextLine();

int num = 0,kong = 0,zimu = 0,other = 0;

//将字符串转化为字符数组

char[] charr = str.toCharArray();

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

//Character.isDigit判断数组中是否有数字

if(Character.isDigit(charr[i])){

num++;

}

//Character.isSpaceChar判断数组中是否有空格

else if(Character.isSpaceChar(charr[i])){

kong++;

}

//Character.isLetter判断字符数组中的字母

else if(Character.isLetter(charr[i])){

zimu++;

}else{

other++;

}

}

System.out.println("英文字母有:" + zimu + "个");

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

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

System.out.println("其他字符有:" + other + "个");

}

}

8、求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此 时共有 5 个数相加),几个数相加有键盘控制。

public class No8 {

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入要相加的数字a(0--9)和相加的次数b");

int a = sc.nextInt();//输入的数字

int b = sc.nextInt();//输入几个数相加

int s = 0;//相加的和

int d = 0;

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

d = d + a;

s = d + s;

a = a * 10;

}

System.out.println("相加的总和:"+s);

}

}

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

public class No9 {

public static void main(String[] args){

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

{

int sum = 0;

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

{

if(i % j == 0)

{

sum += j;

}

}

if(i == sum)

{

System.out.println("完数:" + i);

}

}

}

}

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

public class No5 {

public static void main(String[] args){

double h = 100.0;

double s = 100.0;

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

h = h /2;

s += 2 * h;

}

System.out.println(h);

System.out.println(s);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值