虽然都是一些很简单的题目,但是都是很经典的编程题,多写几道可以熟悉一些Java代码,
之前C语言敲多了一时半会有点不适应,敲起来怪怪的,感觉手不是自己的了哈哈
目录
1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
2.判定一个数字是否是素数
3. 打印 1 - 100 之间所有的素数
4. 输出 1000 - 2000 之间所有的闰年
5. 输出乘法口诀表 (n由用户输入)
6. 求两个正整数的最大公约数
7. 求出0~999之间的所有“水仙花数”并输出。
8. 写一个函数返回参数二进制中 1 的个数
9. 数字9 出现的次数 * 编写程序数一下 1到 100 的所有整数中出现多少个数字9,以及包含 9的数字有几个
10.猜数字游戏
11.计算分数的值 - 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
12.打印x图形
如图
13. 模拟登陆 - 编写代码模拟三次密码输入的场景。
public static void main1(String[] args) {
/**
* 1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄:");
while(scanner.hasNextInt()){
int age = scanner.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("老年");
}
System.out.println("请输入年龄:");
}
}
涉及到一个Math.sqrt(isPrime)数学方法,求平方根,缩小遍历的范围
public static void main2(String[] args) {
/**
* 2. 判定一个数字是否是素数
*/
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int isPrime = scanner.nextInt();
int i = 2;
for (i = 2; i <= Math.sqrt(isPrime); i++) {
if(isPrime % i ==0){
break;//让isPrime这个数,依次除2-isPrime(优化后范围Math.sqrt(isPrime))之间的数,直到能整除时跳出循环
}
}
//判断能被整除的这个数i,是否为isPrime本身。是,则为素数,否则,不是素数
if (i > Math.sqrt(isPrime)) {
System.out.println("是素数");
}else {
System.out.println("不是素数");
}
}
}
在上一题的基础上,打印出来
public static void main3(String[] args) {
/**
* 3. 打印 1 - 100 之间所有的素数
*/
for (int isPrime = 1; isPrime <= 100; isPrime++) {
int i = 2;
for (i = 2; i <= Math.sqrt(isPrime); i++) {
if(isPrime % i ==0){
break;//让isPrime这个数,依次除2-isPrime之间的数(优化范围Math.sqrt(isPrime)),直到能整除时跳出循环
}
}
//判断能被整除的这个数i,是否为isPrime本身。是,则为素数,否则,不是素数
if (i > Math.sqrt(isPrime)) {
System.out.println(isPrime);
}
}
}
public static void main4(String[] args) {
/**
* 4. 输出 1000 - 2000 之间所有的闰年
*/
for (int i = 1000; i <= 2000; i++) {
if((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)){
System.out.println(i);
}
}
}
public static void main5(String[] args) {
/**
* 5. 输出乘法口诀表
*/
// for (int i = 1; i <= 9; i++) {
// for (int j = 1; j <= i ; j++) {
// System.out.printf("%d*%d=%d ",i,j,i*j);
// }
// System.out.println();
// }
/**
* 输出n*n的乘法口诀表,n由用户输入
*/
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i ; j++) {
System.out.printf("%d*%d=%d ",j,i,i*j);
}
System.out.println();
}
}
public static void main6(String[] args) {
/**
* 6. 求两个正整数的最大公约数
*/
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = a % b;
while (c != 0) {
a = b;
b = c;
c = a % b;
}
System.out.println(b);
}
}
public static void main7(String[] args) {
/**
* 7. 求出0~999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数
* * 本身,如: 153=1^3+5^3+3^3 ,则153是一个“水仙花数”。)
*/
for (int i = 0; i < 100000; i++) {
//求出该数是几位数
int num = i;
int count = 0;
while(num != 0){
count++;
num /= 10;
}
//求出每个数字的每一位的三次方 ,计算总和
int sum = 0;
num = i;
while(num != 0){
sum += Math.pow ((num % 10),count);
num /= 10;
}
//判断是否相等
if(i == sum){
System.out.println(i);
}
}
}
public static void main8(String[] args) {
/**
* 8. 写一个函数返回参数二进制中 1 的个数
* * 比如: 15 0000 1111 4 个 1
*/
Scanner scanner =new Scanner(System.in);
while(scanner.hasNextInt()){
int num = scanner.nextInt();
int count =0;
//方法1:用右移运算符
// for (int i = 0; i < 32; i++) {
// if (((num >> i) & 1) == 1) {
// count++;
// }
// }
//方法2:num &= (num - 1)
//每&一次,num的二进制位中都会少个1,直到num=0
//用count计数&的次数就知道有多少个1了
while(num != 0){
count++;
num &= (num - 1);
}
System.out.println(count);
}
}
public static void main10(String[] args) {
/**
* 数字9 出现的次数
* 编写程序数一下 1到 100 的所有整数中出现多少个数字9,以及包含 9的数字有几个
* 20个数字9,包含9的数字有19个
*/
//自己写的方法(求包含0的数字):不局限于几位数
// int count = 0;
// for (int i = 1; i <= 100; i++) {
// int n = i;
// //把每个数的每一位求出来,如果是9,count++
// while(n != 0){
// if(n % 10 == 9){
// //System.out.println(i);
// count++;
// break;
// }
// n /= 10;
// }
// }
// System.out.println(count);
//方法2:针对百位数
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
for (int i = 1; i <= n; i++) {
if(i / 10 == 9){
count++;
} else if (i % 10 == 9) {//这里的elseif条件换成 if就是(多少个数字9)的答案了
count++;
}
}
System.out.println(count);
}
public static void main(String[] args) {
/**
* 猜数字游戏
*
*/
Random random = new Random();//不写Random()参数时,默认随机种子为系统时间(时间戳)
Scanner scanner = new Scanner(System.in);
int randNum = random.nextInt(100);//生成随机数用randNum储存,设置参数区间100,表示[0-100)
System.out.println("请猜数字:");
while(scanner.hasNextInt()){
int guess = scanner.nextInt();
if(guess == randNum) {
System.out.println("猜对了");
break;
}else if(guess < randNum){
System.out.println("猜小了");
}else{
System.out.println("猜大了");
}
}
}
public static void main11(String[] args) {
/**
* 计算分数的值
* 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。
*/
double sum = 0.0;
int flg = 1;
for (int i = 1; i <= 100; i++) {
sum += flg*(1.0/i);
flg *= -1;//flg = -flg 这样也可以
}
System.out.println(sum);
}
如图
public static void main12(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.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();
}
}
}
* 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。
* 三次均错,则提示退出程序
这里用到了psw.equals(password)方法,判断两个字符串是否一致
public static void main9(String[] args) {
/**
* 模拟登陆
* 编写代码模拟三次密码输入的场景。
* 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。
* 三次均错,则提示退出程序
*/
Scanner scanner = new Scanner(System.in);
String password = "ABcd";
int i = 0;
for (i = 0; i < 3; i++) {
System.out.println("请输入密码:");
String psw = scanner.nextLine(); //输入密码
if(psw.equals(password)){
System.out.println("登录成功");
break;
} else if (i==2) {
System.out.println("三次均错,退出程序");
}
}
}