作者简介:一名大一在校生
个人主页:月亮嚼成星~
个人WeChat:yx1552029968
系列专栏:手把手带你刷好题
每日一句: 努力去做一个温暖的人,用真心对世界微笑,用眼泪提醒自己要做的更好,用快乐去迎接每一天的阳光,用自信向世界宣称你过得很好。
🐳01:二进制1的个数
题目描述:求一个整数,在内存当中存储时,二进制1的个数。
🐬解题思路:
求一个整数的二进制1的个数,首先要知道直接求是不行的,必须通过二进制来解决,该整数我们默认是int类型,也就是有32个bit位,所以要用一个循环来比较32次,每比较一次都要移位,移到所需要比较的位置上,比较的时候考虑按位与(&)1,从最右边开始比较,如果比较结果还是1的话则说明该位置是1,则个数加1,统计出最后相加的个数即可求得结果。
import java.util.Scanner;
public class Test {
//求一个整数,在内存当中存储时,二进制1的个数。
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入你要求的数:");
int n=scan.nextInt();
int i=1;
int count=0;
while(i<=32){
if((n&1)==1){
count++;
}
n=n>>1;
i++;
}
System.out.println("你要求整数的二进制中1的个数为"+count);
//System.out.println(count);
}
}
🐳02:计算分数的值
题目描述:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。
🐬解题思路:
这个题比较简单,就是通过利用循环改变分母上的数值,由于中间是一加一减,所以我们要设立一个数1,每次相加完都要变更一下符号,最后把结果算出来即可。(注意一点就是要用浮点型)
public class Test {
public static void main(String[] args) {
int i=1;
int j=1;
double sum=0;
while(i<=100){
sum+=1.0/i*j;
i++;
j=-j;
}
System.out.println(sum);
}
}
🐳03:水仙花数
题目描述:
求出0~n之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1^3+5^3+3^3,则153是一个“水仙花数“。)
🐬解题思路:
这道题的关键在于理解什么是水仙花数,题目上比较明确,这里不多阐释。在理解了之后我们要知道解题的关键就是分别算出这个数的个位(数%10),十位(数/10%10),和百位(数/100),然后再根据循环依次寻找符合条件的数并打印即可。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入所求水仙花数0-n的范围n");
int n=scan.nextInt();
for (int i = 0; i <=n; i++) {
if(i>=100){
int g=i%10;
int s=i/10%10;
int b=i/100;
if((g*g*g+s*s*s+b*b*b)==i){
System.out.println(i);
}
}
}
}
}
🐳04:打印 X 图形
题目描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述:
针对每行输入,输出用“*”组成的X形图案。
🐬解题思路:
这到题首先要看到多组输入,如果只输入一次肯定是通不过的,所以要利用到多组输入,我们观察到图形在有图案的地方是在行等于列的时候和行等于总行数加1减列的时候,其他的位置为空格,所以利用循环即可搞定。
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
while(scan.hasNextInt())
{
int n=scan.nextInt();
for(int i=1;i<=n;i++){//i行
for(int j=1;j<=n;j++){//j列
if(i==j||i==n-j+1){//i==j是正斜线,i==n-j+1是反斜线
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
}
🐳05:乘法口诀表
题目描述:输出n*n的乘法口诀表,n由用户输入。
🐬解题思路:
九九乘法表我们都很熟悉了,在用代码实现的过程中可以考虑分为行和列,第一行一个式子,第二行两个,依次类推,并且我们要知道九九乘法表的特点,这样写n*n乘法表还不是手到擒来?直接两个for循环拿下此题。
import java.util.Scanner;
//输出n*n的乘法口诀表,n由用户输入。
public class Test {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入n*n的乘法口诀表的n");
int n=scan.nextInt();
for (int i = 1; i <=n ; i++) {//行
for (int j = 1; j <=i; j++) {//列
System.out.printf("%d*%d=%2d ",j,i,i*j);
}
System.out.println();
}
}
}
🐳06:输出一个整数的每一位
题目描述:输出一个整数的每一位,如:123的每一位是3,2,1
🐬解题思路:
当我们会求每一位的时候,这个题还不是探囊取物?直接n%10求的个位,然后再除以10,就把原来的十位变成了个位,然后利用while(n>0)循环,把各位都输出即可。
import java.util.Scanner;
//输出一个整数的每一位,如:123的每一位是3,2,1
public class Test {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入你要求的整数");
int n= scan.nextInt();
System.out.printf("%d的每一位是:",n);
while (n>0){
System.out.printf("%d,",n%10);
n= n/10;
}
}
}
🐳07:模拟登陆
题目描述:编写代码模拟三次密码输入的场景。最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序
🐬解题思路:
输入密码问题,首先要默认一个正确的密码,为了错误的时候提示的更加明显,我们要把机会设立为3次,并且在每次错误的时候给予机会提示,每次失败都要将次数减1,直到为0时退出程序,次数问题可以利用while循环。如果相等,就成功登录。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
//密码默认为123456
int n=3;
while(n>0){
System.out.println("请输入密码");
int key= scan.nextInt();
if(key==123456){
System.out.println("密码正确,成功登录!!");
break;
}else{
n=n-1;
System.out.printf("密码错误,还剩%d次机会",n);
if(n>0){
System.out.println("请重新输入密码");
}else{
System.out.println("次数耗尽,退出程序!!");
break;
}
}
}
}
}
🐳08:二进制序列
题目描述:获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列
🐬解题思路:
这个题目又涉及到二进制中移位和位运算的知识了,基本上二进制注意考察的就是这两个知识点,我们知道该数有32个bit,该题要分别求奇数位和偶数位,所以要利用两个循环分别来求,对于偶数的求法要进行向右移位,移位的位置也要变化,移位完成后按位与(&)1,结果为0,则该位为0,为1则该位为1,。奇数的求法与其类似,只是位置不同罢了,所以在移位的时候位置稍变一下就可以求得各位的数字。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要求的数");
int n = scanner.nextInt();
System.out.printf("%d的偶数位二进制序列为:",n);
for (int i = 31; i >= 1 ; i-=2) {
System.out.print(((n>>>i) & 1) + " " );
}
System.out.println();
System.out.printf("%d的奇数位二进制序列为:",n);
for (int i = 30; i >= 0 ; i-=2) {
System.out.print(((n>>>i) & 1) + " " );
}
}
}
🐳总结:
刷题多是一件美事,快来关注博主一起刷题,拒绝焦虑,拒绝懒惰,从关注博主刷题开始。我们下次再见!!
版权归原作者 月亮嚼成星~ 所有, 如有侵权,请联系我们删除。