java经典选择题_java经典练习题

1.1 问题

实现两个变量间的数据交换,例如:有两个整数类型变量a和b,现需要使变量a的值和变量b的值进行交换。例如: a的原值为100,b的原值为200,交换后a的值为200,b的值为100。

不使用中间变量来实现数据交换程序,即实现两个变量值的交换。可以先把a+b值赋给a,接着把a-b的值赋给b,最后把a-b的值在赋给a,请看如下代码:

1 public classSwapExt {2 public static voidmain(String[] args) {3 int a = 100;4 int b = 200;5 System.out.println("a=" + a + ", b=" +b);6 a = a +b;7 b = a -b;8 a = a -b;9 System.out.println("a=" + a + ", b=" +b);10 }11 }

2.1 问题

使用交互的方式计算自由落体运动中物体的位置。用户从控制台输入自由落体的时间t,系统计算经过时间t物体的自由落体位移。计算结果保留一位小数并且输出到控制台。自由落体位移公式为: s = 1/2 × g × t2 ,其中:

s (位移(m)

t (时间(s)

g (重力加速度(9.8m/s2)

1 importjava.util.Scanner;2 public classFreeFall {3 public static voidmain(String[] args) {4 Scanner scanner = newScanner(System.in);5 double g = 9.80;6 System.out.println("请输入自由下落的时间(秒):");7 double t =scanner.nextDouble();8 double s = 0.5 * g * t *t;9 s = Math.round(10 * s) / 10.0;//保留一位小数10 System.out.println(t + "秒后,物体自由下落了" + s + "米");11 }12 }

3.1 问题

系统使用交互的方式给三个数字进行排序。例如:接收用户输入的三个整数a,b,c,a的原值是20,b的原值是5,c的原值是10,排序后a的值为5,b的值为10,c的值为20。

import java.util.Scanner;

public classMaxofThree {

public static void main(String[] args) {

Scannerscanner = new Scanner(System.in);

System.out.println("请依次输入三个整数:a,b,c(以空格隔开)");

int a = scanner.nextInt();

int b = scanner.nextInt();

int c = scanner.nextInt();

scanner.close();

System.out.println("a=" + a + ", b=" + b + ", c=" + c);

int temp = 0;

if (a > b) {

temp = a;

a = b;

b = temp;

}

if (a > c) {

temp = a;

a = c;

c = temp;

}

if (b > c) {

temp = b;

b = c;

c = temp;

}

System.out.println("a=" + a + ", b=" + b + ", c=" + c);

}

}

水仙花数问题

1 importjava.util.Scanner;2 public classTest {3 /**

4 * 业务要求:计算某个范围内所有水仙花数5 * 分析:1、找某个范围的水仙花数需要把这个范围内的每个数取出来判断,所以需要一个for循环取数,6 * 从1开始到控制台输入的值(定义为range)。7 * 2、判断某个数是不是水仙花数需要将该数的每一位都取出来,取出来的方法是定义一个变量last,8 * 用来存这个数对10的余数,然后该数/10再对10取余数。。。这也是个循环,直到这个数变成零循环9 * 停止。所以我们定义一个变量num用来存取出来的i的值,每次取余后都对num进行/10操作,当10 * num==0时循环停止,便可以写出for(int num=i;num>0;num/=10){},取出来的每一位都要11 * 求出自己的三次幂,再求和12 * 3、得到的和sum需要与i比较,若相等,则打印出来13 */

14 public static voidmain(String[] args) {15 Scanner in = newScanner(System.in);16 System.out.println("请输入查找水仙花的范围:0~");17 int range =in.nextInt();18 in.close();19 for (int i = 1; i < range; i++) {20 int sum = 0;//注意变量定义和赋初值的位置

21 for (int num = i; num > 0; num /= 10) {22 int last = num % 10;23 sum += last * last * last;//每一轮开始sum都要清零

24 }25 if (sum ==i) {26 System.out.println(i + "是水仙花数");27 }28 }29 }30 }

计算百钱买百鸡的问题

1 public classTest {2 /**

3 * 业务要求:计算百钱买百鸡4 * 分析:假设公鸡x只,母鸡y只,小鸡z只,那么必须满足x+y+z=100,5x+3y+z/3=100,并且z能整除3。5 * 用穷举法,从0开始一个一个带入去试,能满足条件就输出。6 * 如果都是公鸡的话,100钱只能买20只,所以0<=x<207 * 如果是母鸡的话,100钱只能买30只,所以0<=y<3008 * 如果是小鸡的话,就是100只减去x再减去y9 */

10 public static voidmain(String[] args) {11 for(int x=0;x<20;x++){12 for(int y=0;y<30;y++){13 int z = 100-x-y;14 if((z%3==0)&&(5*x+3*y+z/3==100)){15 System.out.println("公鸡:"+x+",母鸡:"+y+",小鸡:"+z);16 }17 }18 }19 }20 }

猜字母游戏

1 importjava.util.Random;2 importjava.util.Scanner;3

4 public classTest {5 /**

6 * 业务要求:猜字母游戏7 * 系统随机产生5个不重复的字符,然后由用户输入一个5个字符的字符串,由程序判断这5个字符8 * 和系统产生的5是否相同(字母和位置均相同)。如果相同,程序结束,如果不相同, 则输出比较结果以提示用户继续游戏。9 * 分析:10 * 1) char[] answer 被猜测字母序列11 * 2) char[] input 用输入的字母序列12 * 3) int count 猜测次数13 * 4) int[] result = {字符匹配数量,匹配成功位置} 用户输入的序列和被猜测序列的比较结果14 *功能分析设计:15 * 1)随机生成 (generate)16 * 方法算法功能描述:生成n个不重复的大写字母17 * char[] generate(int n)18 * 2)用户输入(Input)19 * 方法算法功能描述:从控制台读取输入,返回5个大写字符20 * char[] userInput()21 * 3)检查(check)用户输入22 * 方法算法功能描述:检查标准答案(answer)和用户输入23 * (input),返回结果:{字符匹配数量,匹配成功位置}24 * int[] check(char[] answer, char[] input)25 * 4)提示猜中情况26 * void show(int count, int[] result)27 * 5) main 方法完成猜测流程控制28 * 1)"生成答案"字符序列:5个字符29 * 2)等待用户的答案输入30 * 3)"检查用户输入"的答案,检查结果包含 匹配数量和匹配位置31 * 4) 统计回答数量32 * 5) 提示检查结果, 返回 (2)33 */

34 public static voidmain(String[] args) {35 char[] answer;36 char[] input;37 int count=0;38 int[] result;39 answer = generate(5);//1)“生成答案”字符序列:5个字符

40 System.out.println(answer);41 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");42 System.out.println("\t欢迎使用猜字母游戏");43 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");44 while (true) {45 input = userInput();//2)等待用户的答案输入

46 result = check(answer,input);//“检查用户输入”的答案

47 count++;48 show(count, result);//提示检查结果

49 if(result[0]==5&&result[1]==5){50 break;//猜对退出

51 }52 }53 }54 public static char[] generate(intn) {55 Random r = newRandom();56 char[] letter = new char[26];57 char[] answer = new char[5];58 boolean[] used = new boolean[letter.length];59 for (int i = 0; i < 26; i++) {60 letter[i] = (char) (i + 65);61 }62 int num,index=0;63 do{64 num =r.nextInt(letter.length);65 if(used[num]){66 continue;67 }68 answer[index++] =letter[num];69 used[num] = true;70 }while(index!=n);71 returnanswer;72 }73 public static char[] userInput() {74 Scanner in = newScanner(System.in);75 char[] input = new char[5];76 String str =in.nextLine();77 while (str.length() != 5) {78 System.out.println("您输入的字母长度不对,请重新输入");79 str =in.nextLine();80 }81 input =str.toCharArray();82 returninput;83 }84 public static int[] check(char[] answer, char[] input) {85 int[] result = new int[2];86 for (int i = 0; i < answer.length; i++) {87 for (int j = 0; j < input.length; j++) {88 if (input[j] ==answer[i]) {89 result[0]++;90 if (j ==i) {91 result[1]++;92 }93 break;//一旦找到一样的,就不用继续比对了

94 }95 }96 }97 returnresult;98 }99 public static void show(int count,int[] result) {100 System.out.println("猜测"+count+"次");101 System.out.println("你猜对了" + result[0] + "个字符,其中" + result[1]102 + "个字符位置正确");103 if(result[0]==5&&result[1]==5){104 System.out.println("恭喜,猜中!");105 }106 }107 }

求质数

1 public classTest {2 /**

3 * 业务要求:求某个范围内的所有质数4 * 质数是只有1和自己本身两个约数的整数5 *6 */

7 public static voidmain(String[] args) {8 Scanner in = newScanner(System.in);9 System.out.println("请输入查找质数的范围:2~");10 int num =in.nextInt();11 in.close();12 for(int i=2;i

求两个整数的最大公约数

1 importjava.util.Scanner;2 public classCommonDivisor {3 public static voidmain(String[] args) {4 Scanner scanner = newScanner(System.in);5 System.out.println("请输入第一个整数:");6 int first =scanner.nextInt();7 System.out.println("请输入第二个整数:");8 int second =scanner.nextInt();9 scanner.close();10 //从两个整数中较小的数开始

11 int start = first > second ?second : first;12 int n = 1;13 for (n = start; n >= 1; n--) {14 //判断n是否是两个整数的约数

15 if ((first % n == 0) && (second % n == 0))16 break;17 }18 System.out.println(first + "和" +second19 + "的最大公约数为:" +n);20 }21 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值