Java练习题(二):逻辑控制编程题

打印 上一主题 下一主题

主题 1517|帖子 1517|积分 4551

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
1.判断一个数是否为素数
2.输出1-100 之间的所有素数
3.输出1000 - 2000 年之间的闰年
4.计算 1到 100 的所有整数中出现多少个数字9
5.输出一个整数在内存当中存储时,二进制1的个数
6.求两个数的最大公约数
7.计算1 - 1/2 + 1/3 - 1/4 + 1/5 …… + 1/99 - 1/100
8.水仙花数
9.实现猜数字游戏
10.打印 X 图形
11.打印乘法口诀表
12.输出一个整数的每一位
13.模仿登录
14.二进制序列
15.四舍五入
16.交换变量值
17.三目运算符新用法
18.验证邮箱格式
19.数列求和
20.求两个数的最小公倍数
21.输入任意多个数字,当输入负数时结束,求出他们的平均数
22.自由落体小球弹起n次所经过的路程与高度
<hr> 1.判断一个数是否为素数

素数是指质数,一个大于1的自然数,除了1 和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。规定1既不是质数也不是合数。
思路:
首先输入一个大于1的正整数n;
再根据素数的定义 除了本身本身和1之外没有因数 即从2 到n-1;
使用for循环 从2除到n-1 使用if语句判断 若在此过程中除余为零 则此数不是素数,若除到n-1还没有出现除余为零的情况 则此数为素数;
  1. public class Main {
  2.     public static void main(String[] args) {
  3.         Scanner scanner = new Scanner(System.in);
  4.         System.out.println("请输入一个大于1的整数:");
  5.         int num = scanner.nextInt();
  6.         int i = 2;
  7.         for (;i<=num-1;i++){
  8.             if (num%i == 0){
  9.                 System.out.println("该数字不是素数");
  10.                 break;
  11.             }
  12.         }//此时循环结束 i = num
  13.         if (num == i){
  14.             System.out.println("该数字是素数");//使用if是考虑输入的num=2时
  15.         }
  16.         
  17.     }
  18. }
复制代码
<hr> 2.输出1-100 之间的所有素数

思路:嵌套for循环
外部for循环 i从2到100 (因为素数是一个大于1的整数,所以从2开始)
内部for循环  j从2 到 i-1 (因为除了1和 i 本身外,不能被其他整数整除,所以获取2到 i -1)。
在内部for循环内使用if选择结构,判断 j 能否被 i整除。
在外部for循环内使用if选择结构,判断 j 与 i 是否相等。
  1. public class Main {
  2.     public static void main(String[] args) {
  3.         //1不是素数 i从2开始到100循环判断
  4.         for (int i = 2;i<=100;i++){
  5.             int j = 2;//除了1和i本身,则j从2到i-1
  6.             for (;j < i;j++){
  7.                 if (i%j==0){
  8.                     break;//如果有整除,则不是素数,应跳出内部循环,进入下一个i的循环
  9.                 }//if一直不满足整除,则进行j自增 如5%2、5%3、5%4
  10.             }//当j自增到等于i时还未有整除,此时循环结束,说明i是素数,此时i=j
  11.             if (i==j){//使用if是考虑到i=2时
  12.                 System.out.print(i+" ");
  13.             }
  14.         }
  15.     }
  16. }
复制代码
<hr> 3.输出1000 - 2000 年之间的闰年

闰年:公历年份是4的倍数且不是100的倍数
  1. for (int year = 1000;year <= 2000;year++){
  2.     if (year % 4 == 0 && year % 100 != 0){
  3.         System.out.println(year);
  4.     }
  5. }
复制代码
<hr> 4.计算 1到 100 的所有整数中出现多少个数字9

  1. public class Main {
  2.     public static void main(String[] args) {
  3.         int count = 0;
  4.         for (int n = 1;n <= 100;n++){
  5.             while (n % 10 == 9){
  6.                 count++;
  7.                 break;//不跳出当前循环 则n=1时一直在判断while语句 进入死循环
  8.             }
  9.         }
  10.         System.out.println(count);
  11.     }
  12. }
复制代码
<hr> 5.输出一个整数在内存当中存储时,二进制1的个数

如:15:0000 1111  四个1
思路:一个数和1相与 如果末位是1,则结果为1 、如果末位是0,则结果为0
0000 1111 & 0000 0001  ==  0000 0001
将该数和1进行按位与运算,运算后再进行移位运算,交替计算,直到该数移位到零为止。根据结果可计算出二进制位中1的个数
  1. import java.util.Scanner;
  2. public class Main {
  3.     public static void main(String[] args) {
  4.         Scanner scanner = new Scanner(System.in);
  5.         System.out.println("请输入一个数字:");
  6.         int num = scanner.nextInt();
  7.         int count = 0;
  8.         while (num != 0){
  9.             if ((num & 1) == 1){
  10.                 count++;
  11.             }
  12.             num = num >> 1;//移位运算要赋值,不能单独写
  13.         }
  14.         System.out.println(count);
  15.     }
  16. }
复制代码
<hr> 6.求两个数的最大公约数

如输入:8 16 最大公约数 :8
方法一:欧几里德算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数.
算法流程图:

  1. import java.util.Scanner;
  2. public class Main {
  3.     public static void main(String[] args) {
  4.         Scanner scanner1 = new Scanner(System.in);
  5.         Scanner scanner2 = new Scanner(System.in);
  6.         System.out.println("请分别输入两个数:");
  7.         int a = scanner1.nextInt();
  8.         int b = scanner2.nextInt();
  9.         int r;
  10.         while(a%b!=0)
  11.         {
  12.             r = a%b;
  13.             a = b;
  14.             b = r;
  15.         }
  16.         System.out.println("最大公约数为:"+b);
  17.     }
  18. }
复制代码

方法二:更相减损法, 出自于中国古代的《九章算术》
  ①先判断两个数的大小,如果两数相等,则这个数本身就 是就是它的最大公约数。
  ②如果不相等,则用大数减去小数,然后用这个较小数与它们相减的结果相比较,如果相等,        这个差就是它们的最大公约数,而如果不相等,则继承实行②操纵。
算法流程图:

  1. import java.util.Scanner;
  2. public class Main {
  3.     public static void main(String[] args)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表