文章目录
题目一
题目二
题目三
题目四
题目五
题目六
点击题目链接即可跳转答题
题目一
CD145 整数的二进制数表达中有多少个1
求一个整数,在内存当中存储时,二进制1的个数。
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n= scanner.nextInt();
int count=0;
for (int i = 1; i <=32 ; i++) {
if(((n>>i)&1)==1){
count++;
}
}
System.out.println("二进制中1的个数:"+count);
}
}
这种方法的缺陷在于:每个数都要按位与完32位,比如1只有第一位是1,后面31个0没有必要比较
优化:
import java.util.Scanner;
public class Main{
public static void main1(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
while (n != 0) {//如果移动的过程当中是0了,就结束循环
if((n & 1) != 0) {
count++;
}
n = n >>> 1;
}
System.out.println(count);
}
}
方法二:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
while (n != 0) {
n = n & (n-1);
count++;
}
System.out.println(count);
}
题目二
ZJ17 水仙花数
求出0~n之间的所有“水仙花数”并输出。
(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本 身,如;153=1^3+5^3+3^3,则153是一个“水仙花数“。)
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n= scanner.nextInt();
int i=0;
for (i = 0; i <=n; i++) {
int count=1;
int tmp=i;
int sum=0;
while(tmp/10!=0){
//求数的位数
count++;
tmp=tmp/10;
}
//计算每一位的次方和
tmp=i;
while(tmp!=0){
sum+=Math.pow(tmp%10,count);
tmp=tmp/10;
}
//判断
if(sum==i){
System.out.println(i);
}
}
}
}
题目三
给一个不多于5位的正整数
输出一个整数的每一位,如:123的每一位是3,2,1
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n= scanner.nextInt();
while (n != 0) {
System.out.println(n % 10);
n /= 10;
}
}
}
题目四
模拟登陆
编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = 3;
while (count != 0) {
System.out.println("请输入你的密码:");
String password = scanner.nextLine();
if(password.equals("123")) {
System.out.println("登录成功!");
break;
}else {
count--;
System.out.println("你还有"+count+" 次机会!");
}
}
}
题目五
二进制序列
获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//0000 0010
for (int i = 31; i >= 1 ; i-=2) {
System.out.print(((n>>>i) & 1) + " " );
}
System.out.println();
for (int i = 30; i >= 0 ; i-=2) {
System.out.print(((n>>>i) & 1) + " " );
}
}
}
题目六
计算分数的值
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。
public class test {
public static void main(String[] args) {
double sum = 0;
int flg = 1;
for (int i = 1; i <= 100; i++) {
sum += 1.0/i * flg;
flg = -flg;
}
System.out.println(sum);
}
}
题目六
输出乘法口诀表
public class test {
public static void main(String[] args) {
for (int i = 1; i <= 9 ; i++) {
for (int j = 1; j <= i; j++) {
//注意这里的拼接,不要是换行
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
}
}