目录
1. 第一题
2. 判定一个数字是否是素数
3. 打印 1 - 100 之间所有的素数
4. 输出 1000 - 2000 之间所有的闰年
5. 输出乘法口诀表
6. 求两个正整数的最大公约数
7. 求二进制中 1 的个数
8.分别输出二进制中的奇数位和偶数位
下面的源码大多只有方法体,需要自己补全类之后才能用
(1)题目
根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
(2)本题思路
import java.util.Scanner;//导入的包
Scanner scanner = new Scanner(System.in);//工具
int age = scanner.nextInt();//从键盘输入年龄
if(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("老年");
}
(3)完整代码
import java.util.Scanner;//导入的包
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//工具
int age = scanner.nextInt();//从键盘输入年龄
if(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("老年");
}
scanner.close();//关闭工具
}
}
(1)了解素数
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
(2)思路
boolean tmp = true;
while(i<=Math.sqrt(ret)) {
if(ret%i==0) {
System.out.println(ret+"不是素数");
tmp = false;
break;
}
i++;
}
if(tmp) {
System.out.println(ret+"是素数");
}
(3)完整代码
import java.util.Scanner;//导入的包
public class Test {
public static void main(String[] args) {//判断素数
Scanner scanner = new Scanner(System.in);
int ret = scanner.nextInt();
int i=2;
boolean tmp = true;
while(i<=Math.sqrt(ret)) {
if(ret%i==0) {
System.out.println(ret+"不是素数");
tmp = false;
break;
}
i++;
}
if(tmp) {
System.out.println(ret+"是素数");
}
scanner.close();//关闭工具
}
}
(1)思路
本体是在第二题的基础上改造,也就是在外层套上一个循环即可,用来输出1-100的数字;要注意ret++的操作
(2)完整代码
public static void main(String[] args) {//判断素数
int ret = 2;
while(ret<=100) {
int j=2;
boolean tmp = true;
while(j<=Math.sqrt(ret)) {
if(ret%j==0) {
tmp = false;
break;
}
j++;
}
if(tmp) {
System.out.println(ret+"是素数");
}
ret++;
}
(1)判断闰年的方法
闰年有两种:
所以代码写法:只需要将判断条件写在一起即可
if(year%400==0||(year%100!=0&&year%4==0)) {
System.out.println(year);
}
(2)完整代码
public static void main6(String[] args) {
//输出1000-2000之间的闰年
int year = 1000;
while(year<=2000) {
if(year%400==0||(year%100!=0&&year%4==0)) {
System.out.println(year);
}
year++;
}
}
(1)了解乘法口诀表
这就是乘法口诀表的性质和特点,里面的表格就需要我们去考虑了。
(2)思路
for(i=1;i<=9;i++) {
int j=1;
for(j=1;j<=i;j++) {
System.out.print(i+"*"+"="+(i*j)+" ");
}
System.out.println();
}
System.out.print(i+"*"+"="+(i*j)+" ");
(3)完整代码
public static void main(String[] args) {
//输出九九口诀表
int i=1;
for(i=1;i<=9;i++) {
int j=1;
for(j=1;j<=i;j++) {
System.out.print(i+"*"+"="+(i*j)+" ");
}
System.out.println();
}
}
(1)介绍最大公约数
概念:公约数是可以同时整除两个数,公约数最大的那个就是最大公约数,如:4是12与16的最大公约数,12/4==0且16/4==0,比4大的就不能整除他们俩
特点:一定<=他们之间最小的
(2)常规方法
int a = 12;
int b = 16;
int min=a>b?b:a;//找最小值
while(min>=1) {
if(a%min==0&&b%min==0) {
break;
}
min--;
}
public static void main(String[] args) {
//求最大公因数
int a = 12;
int b = 16;
int min=a>b?b:a;//找最小值
while(min>=1) {
if(a%min==0&&b%min==0) {
break;
}
min--;
}
System.out.println("最大公约数是:"+min);
}
(3)辗转相除法
用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
public static void main(String[] args) {
//求最大公因数
int a = 12;
int b = 16;
int c = a%b;
while(c!=0) {
a = b;
b = c;
c = a%b;
}
System.out.println("最大公约数:"+b);
}
(1)了解题目要求
如:7,二进制为00000111(只展示8位),1的位数共有3,所以需要求出3
(2)常规方法
思路:
if(((a>>>i)&1)==1) {
sum++;
}
完整代码:
public static void main(String[] args) {
//求二进制中1的个数
int a = -1;
int sum = 0;
int i = 0;
for(i=0;i<32;i++) {
if(((a>>>i)&1)==1) {
sum++;
}
}
System.out.println(sum);
}
(3)快速法
原理(举例说明):
完整代码:
public static void main(String[] args) {
//求二进制中1的个数
int n = 7;
int i = 0;
while(n!=0) {
n=n&(n-1);
i++;
}
System.out.println(i);
}
(1)题目意思
如:7的二进制为:00000000 00000000 00000000 00000111
奇数位(标红的数字):10101010 111010101010101 01000111
偶数位(标黑的数字):10101010 111010101010101 01000111
(2)思路
(3)完整代码
public static void main(String[] args) {
int n = 7;
int i=0;
//获取奇数位
System.out.print("奇数位:");
for(i=30;i>=0;i-=2) {
System.out.print(((n>>>i)&1)+" ");
}
System.out.println();
System.out.print("偶数位:");
for(i=31;i>=1;i-=2) {
System.out.print(((n>>>i)&1)+" ");
}
}
本节完…………………………………………