1. 根据年龄 , 来打印出当前年龄的人是少年 ( 低于 18), 青年 (19-28), 中年 (29-55), 老年 (56 以上 )
Scanner sc = new Scanner(System.in); int age = sc.nextInt(); if(age > 0 && age <= 18) { System.out.println("是少年"); } else if(age >= 19 && age <= 28) { System.out.println("是青年"); } else if(age >= 29 && age <= 55){ System.out.println("是中年"); } else { System.out.println("是老年"); }2. 打印 1 - 100 之间所有的素数
for (int j = 1; j <= 100; j++) { int i = 2; for (; i < Math.sqrt(j); i++) { if(j % i == 0) { break; } }if(i > Math.sqrt(j)) { System.out.println(j +"是素数"); } }3. 输出 1000 - 2000 之间所有的闰年
Scanner scan = new Scanner(System.in); int year = scan.nextInt(); int count = 0; for (int year = 1000; year <= 2000; year++) { if (year % 100 == 0) { if (year % 400 == 0) { System.out.println(year + "is 闰年"); } }else { if (year % 4 == 0) { System.out.println(year + "is 闰年"); } } }4.输出乘法口诀表
//1*1 = 1 //2*1 = 2 2*2 = 4 //3*1 = 3 3*2 = 6 3*3 = 9 //... //不难发现第一行有一个表达式,第二行有两个,第三行有三个... //所以内循环从1到i for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.printf("%d*%d = %2d ",i,j,i*j); } System.out.printf("\n"); }5.求两个正整数的最大公约数 法一:
Scanner scan = new Scanner(System.in); int number1 = scan.nextInt(); int number2 = scan.nextInt(); int min = number1 > number2 ? number2 : number1; while(true) { if(number1 % min == 0 && number2 % min == 0) { break; } min--; } System.out.println(min + "is 最大公约数");
上述解法是比较朴素的解法 -- 硬解,拿到两个数中的较小数,再利用循环,找到能同时被两个数整除的最大数。
法二:辗转相除法:假设有两个数a和b,a % b = c; 将b赋值给a,即a = b;将c赋值给b,即b = c;继续 进行a%b(a = b, b = c),直到a % b为零,此时b即为a和b的最大公约数。
以24与18为例,24和18的最大公约数为6,
计算过程: 24 % 18 = 6, 18 % 6 = 0,6为最大公因数,
那么如果一开始是 18 % 24有没有影响呢? 我们来看, 18 % 24 = 18; 24赋值给%左边的变量,18赋值给%右边的变量,又变成 24 % 18了,所以没有影响.可能讲得有点抽象,直接看代码.
Scanner scan = new Scanner(System.in); int number1 = scan.nextInt(); int number2 = scan.nextInt(); int tmp = number1 % number2;//假设为24 % 18 while(tmp != 0) { number1 = number2;//number1 = 18 number2 = tmp;//number2 = 6 tmp = number1 % number2;//tmp = 18 % 6 } System.out.println(number2 + "is 最大公约数");6.求出 0 ~ 999 之间的所有 “ 水仙花数 ” 并输出。 (“ 水仙花数 ” 是指一个三位数,其各位数字的立方和确好等于该数 本身,如: 153 = 1^3 + 5^3 + 3^3 ,则 153 是一个 “ 水仙花数 ” 。 ) 分析:1.想要求出3位的水仙花数的先拿到它的个位数,十位数和百位数 2.利用 Math.pow(number,3);//可以得到nember的三次方.
for (int i = 0; i <= 999; i++) { int count = 0; //假设i = 123 int tmp = i; while(i != 0) { count++; i /= 10; } i = tmp; int sum = 0; while(tmp != 0) { sum += Math.pow(tmp % 10,count); tmp /= 10; } if(sum == i) { System.out.println(i + "is 水仙花数"); } }
7.打印 X 图形
只需注意到当i == j或者i+j = n-1时为 * ,那么这道题就好写了
Scanner sc = new Scanner(System.in); while(sc.hasNextInt()) { int a = sc.nextInt(); for (int i = 0; i < a; i++) { for (int j = 0; j < a; j++) { if(i == j || i + j == a-1) { System.out.print("*"); }else{ System.out.print(" "); } } System.out.println(); } }
8.编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序
int count = 3; Scanner sc = new Scanner(System.in); while(count != 0) { System.out.println("请输入密码:"); String password = sc.nextLine(); if(password.equals("123456")) { System.out.println("登录成功!"); break; }else{ System.out.println("密码错误,你还有"+ (count-1) +"次机会"); count--; } }
9.获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列
int n = 7;//0000 0000 0000 0000 0000 0000 0000 0111 31...4 3 2 1 第32位为符号位不用管,只算到31,第一位(奇数位)上的数字:1,第二位(偶数位)上的数字:1,第三位(奇数位)...第三十一位(奇数位)上的数字:0. 从第一位开始每+两位都是奇数位,同里从第二位开始每+2都是偶数位. 所以for(int i = 1;i <= 30,i += 2)表示奇数位上的数字,为了打印出来的顺序与0000 0000 0000 0000 0000 0000 0000 0111一致,故将for(int i = 1;i <= 30,i += 2)倒过来写:for(int i = 30;i >= 0; i -= 2),偶数位也同理 for (int i = 30; i >= 0; i -= 2) { System.out.print( ((n >> i) & 1) + " "); }//右移>>: 最右位去掉,正数在最左补0,负数补1.&:如果两个二进制位都是 1,则结果为 1,否则结果为 0. System.out.println(); for (int i = 31; i >= 1; i -= 2) { System.out.print( ((n >> i) & 1) + " "); }
以上所有练习的答案或许有不足的地方,还望各位多多包涵!
标签:逻辑,Scanner,int,18,System,number2,习题,Javase,out From: https://blog.csdn.net/2302_81886858/article/details/140448644