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) + " ");
}以上所有练习的答案或许有不足的地方,还望各位多多包涵!