JAVASE语法零基础——逻辑控制输入与输出练习题以及曾经大厂考过的一些笔试题和面试题
Java系列文章目录
Write once,Runanywhere.🔥🔥🔥
逻辑控制输入与输出练习题,先不要看答案,先自己动手敲代码,看看是哪个地方卡住了自己。
如果有疑问或者有异议的地方可以私信我。
💥 💥 💥如果你觉得我的文章有帮助到你,还请【关注➕点赞➕收藏】,得到你们支持就是我最大的动力!!!
💥 💥 💥
⚡版权声明:本文由【马上回来了】原创、在CSDN首发、需要转载请联系博主。
版权声明:本文为CSDN博主「马上回来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
🚀🚀🚀 新的知识开始喽🚀🚀🚀
文章目录
- Java系列文章目录
- 1.输出乘法口诀表。
- 2.模拟登陆
- 3.水仙花数
-
- 3.1 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1+5+3?,则153是一个“水仙花数“。)
- 3.2 变种水仙花数(自幂数)
- 4. 打印X图形
- 5. 求最大公约数
- 6. 输出闰年
- 7. 打印素数
- 8.百度面试题: 判定素数
- 9. 数字9出现的次数
- 10.写一个函数返回参数二进制中1的个数
- 11.百度面试题:判断一个正整数,是不是2的k次方。
- 12.获取一个二进制序列中所有的奇数位和偶数位,分别输出二进制序列。
- 答案
-
- 1.输出乘法口诀表。
- 2.模拟登陆
- 3.水仙花数
-
- 3.1 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1+5+3?,则153是一个“水仙花数“。)
- 3.2 变种水仙花数(自幂数)
- 4.打印X图形
- 5.求最大公约数
-
- 5.1求最小公倍数
- 6. 输出闰年
- 7.打印素数
- 8. 判定素数
- 9.数字9出现的次数
- 10.写一个函数返回参数二进制中1的个数
- 11.百度面试题:判断一个正整数,是不是2的k次方。
1.输出乘法口诀表。
输出n*n的乘法口诀表,n由用户输入。
在这里插入代码片
2.模拟登陆
编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序。
在这里插入代码片
3.水仙花数
3.1 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1+5+3?,则153是一个“水仙花数“。)
在这里插入代码片
3.2 变种水仙花数(自幂数)
什么是自幂数?如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
例如:在十进制中,153是一个三位数,各个数位的3次幂之和为13+53+3^3=153,所以153是十进制中的自幂数。
在n进制中,所有小于n的正整数都为自幂数,比如2进制中1是自幂数,3进制中1和2都是自幂数,4进制中1,2和3都是自幂数…
在这里插入代码片
4. 打印X图形
在线oj地址
5. 求最大公约数
求两个正整数的最大公约数
在这里插入代码片
6. 输出闰年
输出 1000 - 2000 之间所有的闰年
在这里插入代码片
7. 打印素数
打印 1 - 100 之间所有的素数
在这里插入代码片
8.百度面试题: 判定素数
给定一个数字,判定一个数字是否是素数
在这里插入代码片
9. 数字9出现的次数
编写程序数一下 1到 100 的所有整数中出现多少个数字9
在这里插入代码片
10.写一个函数返回参数二进制中1的个数
如15 0000 1111 4个1
在这里插入代码片
11.百度面试题:判断一个正整数,是不是2的k次方。
在这里插入代码片
12.获取一个二进制序列中所有的奇数位和偶数位,分别输出二进制序列。
答案
1.输出乘法口诀表。
代码一:格式化输出
public class TestDemo {//输出n*n的乘法口诀表,n由用户输入。public static void main(String[] args) {//输入 System.out.println("打印n*n的乘法表,请输入n"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //打印 for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.printf("%d*%d=%2d ",i,j,i*j); } System.out.println("\n"); } }}
代码二:+拼接字符串
//打印乘法口诀表 public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i+"*"+j+"=" +i*j+" "); } System.out.println(); } }
2.模拟登陆
public static void main(String[] args) { String code = "123456"; System.out.println("请输入正确的密码"); int count = 3; //输入 Scanner sc = new Scanner(System.in); String cd = "0"; while(count != 0){ cd = sc.nextLine(); //java里字符串的比较使用equals if (code.equals(cd) == true){ System.out.println("密码正确"); } else{ System.out.println("密码错误,重新输入"); count--; } } if (code.equals(cd) == false){ System.out.println("三次输入密码错误"); }}
3.水仙花数
3.1 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1+5+3?,则153是一个“水仙花数“。)
ublic static void main(String[] args) { int tmp = 0; int sum =0; //产生0~999的数字 for (int i = 0; i < 999; i++) { //引入中间变量,保护i的值,防止在接下来的操作当中i的值被串改 tmp = i; //153%10=3,153/10=15 模十,除十来得到153的每一位 while(tmp!=0){//153 //Math.pow(x,n),求x的n次方 sum = sum + (int)Math.pow(tmp%10,3); tmp/=10; } //判断是否相等if(i == sum) { System.out.println(i);}sum = 0;//置为0 很重要 }}
3.2 变种水仙花数(自幂数)
//1.求出位数:除十 //2.求幂 //3.判断是否相等 public static void main(String[] args) { //产生6位数 int count = 0; int tmp = 0; int sum = 0; for (int i = 0; i < 999999; i++) {//153 tmp = i; //求位数 while(tmp != 0){//153 tmp /= 10; count++; } //求幂 tmp = i; while(tmp != 0){ sum += Math.pow(tmp%10,count);//+=已经帮我们进行了强制类型转换 tmp /= 10; } //判断是否相等 if(i == sum){ System.out.println(i); } //注意判断完一个数字后,sum和count都需要重置来进行下次下一个数字的判断换 sum = 0; count = 0; } }
4.打印X图形
import java.util.Scanner;public class Main{ public static void main(String[] args){ //多组输入 Scanner sc = new Scanner(System.in); while(sc.hasNextInt()){ int n = sc.nextInt(); //相当于二维数组的打印 for(int i = 0; i<n ; i++){ for(int j = 0; j<n; j++){ if((j+i==n-1) || j==i){//对角线上打印* System.out.printf("*"); }else{//其余位置打印空格 System.out.printf(" "); } } System.out.printf("\n");//打印完一行后换行 } } }}
5.求最大公约数
//求最大公约数 public static void main(String[] args) { int a = 8; int b = 12; int m = a%b; //辗转相除法 while(m != 0){ a = b; b = m; m = a%b; } System.out.println("最大公约数"+b); }
5.1求最小公倍数
6. 输出闰年
public class TestDemo { //输出 1000 - 2000 之间所有的闰年public static void main(String[] args) { for (int i = 1000; i <= 2000; i++) { if (i % 100 == 0) {//世纪年 if (i % 400 == 0) { System.out.println(i); } //else {// System.out.println("不是闰年");//} } else {//普通年 if (i % 4 == 0) { System.out.println(i); }// else {// System.out.println("不是闰年");// } } } }
7.打印素数
试除法:代码1:引入布尔变量
用数字i依次除以[2,i-1]里的数字
//打印素数 public static void main(String[] args) { boolean flag = true;//认为flag==true是素数 for (int i = 2; i <= 100 ; i++) { flag = true;//这里将flag又赋值为true很重要,因为如果后面flag=false后,就已经判断完一个数字,新的数字又需要重新判断 for (int j = 2; j < i; j++) { //如果被整除就不是素数 if(i % j == 0) { flag = false; } } if(flag == true){ System.out.print(i); System.out.print(" "); } } }}
代码二:未引入布尔变量
public static void main(String[] args) { int j; for (int i = 2; i <= 100; i++) { for ( j = 2; j < i; j++) {//两种情况跳出for循环:1.j == i ; 2.进入if语句遇到break跳出循环 if(i%j == 0){ break; } } //1. j==i 是素数 2.i%j == 0,不是素数 if(i==j){ System.out.print(i); System.out.print(" "); } }
优化一:任何一个数字n都可以写成两个数的乘积:n = a*b
例如:16 = 1 * 16,16 = 2 * 8,16 =4 *4 , 通过观察对于a、b必定存在一个数字小于等于n/2,因此可优化的地方就在这里,可以将[2,i-1]的范围缩小到[2,n/2]
public static void main(String[] args) { int j; for (int i = 2; i <= 100; i++) { for ( j = 2; j <= i/2; j++) {//两种情况跳出for循环:1.j > i/2 ; 2.进入if语句遇到break跳出循环 if(i%j == 0){ break; } } //1. j>i/2 是素数 2.i%j == 0,不是素数 if(j>i/2){ System.out.print(i); System.out.print(" "); } } }
优化二:n=a*b,还是拿16来举例:
16 = 1 * 16,16 = 2 * 8,16 =4 *4 ,a,b一定存在一个数字小于等于√16,也就是说一定存在一个数小于等于√n,因此范围又减小了[2,√n]
public static void main(String[] args) { int j; for (int i = 2; i <= 100; i++) { for ( j = 2; j <= Math.sqrt(i); j++) {//两种情况跳出for循环:1.j > Math.sqrt(i) ; 2.进入if语句遇到break跳出循环 if(i%j == 0){ break; } } //1. j> Math.sqrt(i)是素数 2.i%j == 0,不是素数 if(j>Math.sqrt(i)){ System.out.print(i); System.out.print(" "); } } }
8. 判定素数
//判断一个数字是否是素数 public static void isPrime(int n){ int i = 2; for (; i < Math.sqrt(n); i++) { if(n % i == 0){ break; } } if(i > Math.sqrt(n)){ System.out.println(n+"是素数"); }else{ System.out.println(n+"不是素数"); } } public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int n = in.nextInt(); isPrime(n); } }
9.数字9出现的次数
编写程序数一下 1到 100 的所有整数中出现多少个数字9
if()
else if()
99只进入其中一个语句,所以避免了99的重复
//编写程序数一下 1到 100 的所有整数中出现多少个数字9 //个位数为9;09 19 29 39 49 59 69 79 89 99 //十位数为9: 90 91 92 93 94 95 96 97 98 99public static void main(String[] args) { int count = 0; for (int i = 1; i <= 100 ; i++) { //个位数为9 if(i%10 == 9){ count++; } //十位数为9 else if(i/10 == 9){ count++; } } System.out.println(count);}
10.写一个函数返回参数二进制中1的个数
代码1:
//写一个函数返回参数二进制中1的个数 //15: 0000 1111 & 1 //按位与==》找1public static void main(String[] args) { int i = 15; int count = 0;//计数器 for (int j = 0; j < 32; j++) { if(((i>>j)&1)==1){ count++; } } System.out.println(count);}
优化:代码二
拿15来说二进制位中只有4个1,因此其实只用右移4次,但是上面的代码实际多移了27次,因此我们只用判断当数字为0时就不用再右移了。
这里说明:如果用1来左移的话,那想要找数字n里的个数,则一定需要左移31次,这样效率不高,使用采用数字n右移的方式。
//15: 0000 1111 //右移四次后为0 public static void main(String[] args) { int n = 15; // int n = -1 int count = 0; while(n != 0){ if(((n)&1) == 1){//>>>无符号右移,符号位补0,这样就可以正确的计算出-1二进制位中1的个数 count++; } n >>>= 1; } System.out.println(count); }
优化:代码三
public static void main(String[] args) { int n = 15; int count = 0;//记数器,用来记1的个数 while(n !=0 ){ n = n&(n-1); count++; } System.out.println(count); }
11.百度面试题:判断一个正整数,是不是2的k次方。
因为2的次方在对应正整数的二进位都为1,比如:0000 1000 就是2的三次方;0000 1111就是2^3 + ……+2^0.使用直接使用n = n&(n-1)
来计算出运算次数即可。
public static void main(String[] args) { int i = 15;//0000 1111 //从后往前 //偶数位 for (int j = 31; j >= 1; j-=2) {//第32位符号位是偶数位,右移31,第2位是偶数位 System.out.print(((i>>j)&1)+" "); } System.out.println(); //奇数位 for (int j = 30; j >= 0 ; j-=2) {//第31位是奇数位,右移30位,第1位是奇数位 System.out.print(((i>>j)&1)+" "); } }
🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏
🌔 🌔 🌔下次见喽🌔 🌔 🌔