0712(007天 字符串练习题)

0712(007天 )

每日一狗(边牧王可爱)

在这里插入图片描述

主标题

1. 复习

1.1 变量

1.2 常量

1.3 顺序、条件分支、循环


2. 练习题

2.1 回文数

package com.lianxi;

public class T01回文数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int sum = 0;
		for (int n = 1000; n < 10000; n++) {
			int num = n;
			String numS1 = num + "";
			String numS2 = "";
			for (int i = numS1.length() - 1; i >= 0; i--) {
				numS2 += numS1.charAt(i);
			}
			if (numS1.equals(numS2)) {
				System.out.print(numS1 + "\t");
				sum++;
				if (sum % 10 == 0) {
					System.out.println();
				}

			}
		}
		System.out.println("1000到10000之间有" + sum + "个回文数");
	}

}

2.2 输出1到100之间能被3整除并且能被5整除的所有整数

每行输出6个数字,并输出所有符合条件数据的累加和

package com.lianxi;

public class T02 {

	public static void main(String[] args) {
		// 输出1到100之间能被3整除并且能被5整除的所有整数
		// 每行输出6个数字,并输出所有符合条件数据的累加和
		int num = 0;
		int sum = 0;
		for (int i = 0; i <= 100; i++) {
			if (i % 3 == 0 && i % 5 == 0) {
				System.out.print(i + "\t");
				num++;
				sum += i;
				if (num % 6 == 0) {
					System.out.println();
				}
			}
		}
		System.out.println("\n1到100之间能被3整除并且能被5整除的所有整数累加和为" + sum);
	}
}

2.3 成绩评级

  • 100优秀90良好80中等70及格60不及格0

// if_else if … else


// 100优秀90良好80中等70及格60不及格0

int score;
score = 60;
if (score < 0 || score > 100) {
    System.out.println("不合法数据");
} else if (score < 60) {
    System.out.println("不及格");
} else if (score < 70) {
    System.out.println("及格");
} else if (score < 80) {
    System.out.println("中等");
} else if (score < 90) {
    System.out.println("良好");
} else {
    System.out.println("优秀");
}

// if嵌套


score = 70;
if (score < 0 || score > 100) {
    System.out.println("不合法数据");
} else {
    if (score < 80) {
        if (score < 60) {
            System.out.println("不及格");
        } else if (score < 70) {
            System.out.println("及格");
        } else {
            System.out.println("中等");
        }
    } else {
        if (score < 90) {
            System.out.println("良好");
        } else {
            System.out.println("优秀");
        }
    }
}

// switch_case


switch (score / 10) {
    case 10:
    case 9:
        System.out.println("优秀");
        break;
    case 8:
        System.out.println("良好");
        break;
    case 7:
        System.out.println("中等");
        break;
    case 6:
        System.out.println("及格");
        break;
    default:
        System.out.println("不及格");
        break;
}

2.4 杨辉三角

// 杨辉三角
int n = 9;
for (int i = 1; i <= n; i++) {
    System.out.print(i);
    for (int k = 0; k < n - i; k++) {
        System.out.print(" ");
    }
    for (int k = 0; k < 2 * i - 1; k++) {
        System.out.print("*");
    }
    System.out.println();
    // repeat 平替循环
    //			System.out.print(" ".repeat(n - i)); // 输出 总行数-行数 个空格
    //			System.out.print("*".repeat(2 * i - 1)); // 输出 行数*2-1 个星号
    //			System.out.println();
}

杨辉三角

扩展 空心杨辉三角

循环

int n = 5;

for (int i = 1; i <= n; i++) {
    // 输出空格
    for (int k = 0; k < n - i; k++) {
        System.out.print(" ");
    }
    System.out.print("*"); // 输出左边的 星号
    int kong = 2 * (i - 1) - 1; // 计算中间要输出多少个空格
    if (kong > 0) { // 第一行没有空格不用输出 但是计算出来的空格数为 -1 进行判断 不让计算结果为 负值 的输出,而且第一行的右边星号是不需要的
        for (int k = 0; k < kong; k++) {
            if (i != n) { // 最后一行要封底,中间与其他行输出不同
                System.out.print(" ");
            } else {
                System.out.print("*");
            }
        }
        System.out.print("*"); // 输出右边的 星号
    }

    System.out.println();
}

偷懒

// int n = 5;
System.out.println(1 + " ".repeat(n - 1) + "*");
for (int i = 2; i <= n - 1; i++) {
    System.out.print(i);
    System.out.print(" ".repeat(n - i));
    System.out.print("*");
    System.out.print(" ".repeat(2 * (i - 1) - 1));
    System.out.println("*");
}
System.out.println(n + "*".repeat(2 * n - 1));

在这里插入图片描述

2.5 输出菱形

// 实心菱形
System.out.println("实心菱形");
int n = 4;
for (int i = 1; i <= n; i++) {
    for (int k = 0; k < n - i; k++) {
        System.out.print(" ");
    }
    for (int k = 0; k < 2 * i - 1; k++) {
        System.out.print("*");
    }
    System.out.println();
}
for (int i = n - 1; i > 0; i--) {
    for (int k = 0; k < n - i; k++) {
        System.out.print(" ");
    }
    for (int k = 0; k < 2 * i - 1; k++) {
        System.out.print("*");
    }
    System.out.println();
}

在这里插入图片描述

扩展:空心菱形

System.out.println("空心菱形");
int n = 4;
System.out.println(1 + " ".repeat(n - 1) + "*");
for (int i = 2; i <= n; i++) {
    System.out.print(i);
    System.out.print(" ".repeat(n - i));
    System.out.print("*");
    System.out.print(" ".repeat(2 * (i - 1) - 1));
    System.out.println("*");
}
for (int i = n - 1; i > 1; i--) {
    System.out.print(i);
    System.out.print(" ".repeat(n - i));
    System.out.print("*");
    System.out.print(" ".repeat(2 * (i - 1) - 1));
    System.out.println("*");
}
System.out.println(1 + " ".repeat(n - 1) + "*");

在这里插入图片描述

2.6 找出1000以内的所有完数

// TODO Auto-generated method stub
for (int i = 1; i <= 1000; i++) {
    int sum = 0;
    for (int n = 1; n <= i / 2; n++) { // 这里要降低运算次数的话必须吧 i / 2 也算进去
        if (i % n == 0) {
            sum += n;
        }
    }
    boolean wan = false;

    if (i == sum) {
        wan = true;
    }
    if (wan) {
        System.out.print(i + "=sum(");
        for (int n = 1; n <= i / 2; n++) {
            if (i % n == 0) {
                System.out.print(n + ",");
            }
        }
        System.out.println(")");
    }
}

在这里插入图片描述

2.7 有1、2、3、4一共四个数字,能组成多少个不相等且无重复数字的三位数?都是多少?

注:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的就 可以了。

// 有1、2、3、4一共四个数字,能组成多少个不相等且无重复数字的三位数?都是多少?
int num = 0;
int sum = 0;
String sumStr = "";
for (int i = 1; i <= 4; i++) {
    for (int j = 1; j <= 4; j++) {
        for (int k = 1; k <= 4; k++) {
            if (i != j && j != k && i != k) {
                System.out.print(i + "" + j + "" + k + "\t");
                sumStr += (i + "" + j + "" + k + "+");
                sum = sum + i * 100 + j * 10 + k;
                num++;
                if (num % 3 == 0) {
                    System.out.println();
                }
            }
        }
    }
}
sumStr = sumStr.substring(0, sumStr.length() - 1);
System.out.println("1、2、3、4一共四个数字,能组成" + num + "个不相等且无重复数字的三位数");
System.out.println(sumStr + "=" + sum);

在这里插入图片描述

2.8 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13。求出这个数列的前20项之和。

注:提前告诉答案是32.66026079864164

// TODO Auto-generated method stub
int n1 = 2, n2 = 3;
int m1 = 1, m2 = 2;
int n = 0;
int m = 0;
double sum = 1. * n1 / m1 + 1. * n2 / m2;
for (int i = 3; i < 21; i++) {
    n = n1 + n2;
    m = m1 + m2;
    System.out.print(n + "/" + m + "+");
    sum += 1. * n / m;
    n = n2;
    n2 = n1 + n2;
    n1 = n;

    m = m2;
    m2 = m1 + m2;
    m1 = m;
}
System.out.println("\n" + sum);

在这里插入图片描述

2.9 完全平方数 一万以内的数量

一个整数,它加上100或者268后都是一个完全平方数,请问在1万以内,这样的数有几个,分别是多 少?

// 循环控制
int num = 0;
for (int i = 1; i < 10000; i++) {
    double k = Math.sqrt(i + 100);
    boolean b1 = false;
    if (k * k == (i + 100)) {
        b1 = true;
    }
    k = Math.sqrt(i + 268);
    if (k * k == (i + 268)) {
        b1 = true;
    }
    if (b1) {
        System.out.print(i + "\t");
        num++;
        if (num % 3 == 0) {
            System.out.println();
        }
    }
}

后续题目:

2.10 判定三角形

// TODO Auto-generated method stub
int a = 3, b = 4, c = 5;
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个边长:");
while (true) {
    int tmp = 0;
    String tmpS = "";
    try {
        tmpS = sc.next();
        tmp = Integer.parseInt(tmpS);
    } catch (Exception e) {
        // TODO: handle exception
        System.out.println("您输入的字符不合法");
        continue;
    }
    if (tmp < 1 || tmp >= 100) {
        System.out.println("边长限定在[1,100)以内,请重新输入");
    } else {
        a = tmp;
        break;
    }
}
System.out.println("请输入第二个边长:");
while (true) {
    int tmp = 0;
    String tmpS = "";
    try {
        tmpS = sc.next();
        tmp = Integer.parseInt(tmpS);
    } catch (Exception e) {
        // TODO: handle exception
        System.out.println("您输入的字符不合法");
        continue;
    }
    if (tmp < 1 || tmp >= 100) {
        System.out.println("边长限定在[1,100)以内,请重新输入");
    } else {
        b = tmp;
        break;
    }
}
System.out.println("请输入第三个边长:");
while (true) {
    int tmp = 0;
    String tmpS = "";
    try {
        tmpS = sc.next();
        tmp = Integer.parseInt(tmpS);
    } catch (Exception e) {
        // TODO: handle exception
        System.out.println("您输入的字符不合法");
        continue;
    }
    if (tmp < 1 || tmp >= 100) {
        System.out.println("边长限定在[1,100)以内,请重新输入");
    } else {
        c = tmp;
        break;
    }
}
boolean sanJiao = (a + b > c) && (a + c > b) && (b + c > a);
if (sanJiao) {
    if (a == b && b == c) {
        System.out.println("等边三角形");
    } else if (a == b || a == c || b == c) {
        System.out.println("等腰三角形");
    } else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) {
        System.out.println("直角三角形");
    } else {
        System.out.println("普通三角形");
    }
} else {
    System.out.println("不是三角形");
}
sc.close();

在这里插入图片描述

在这里插入图片描述

2.11 找出1~100所有的9的个数

注释:99含有两个9

// 求余数法计数
int count = 0;
for (int i = 0; i < 100; i++) {
    int gewei = i % 10;
    int shiwei = i / 10;
    if (gewei == 9) {
        count++;
    }
    if (shiwei == 9) {
        count++;
    }
}
System.out.println("1~100以内有" + count + "个9");
// 拼接字符串 判断
count = 0;
String ss = "";
for (int i = 0; i < 100; i++) {
    ss += i;
}
int pos = 0;
while (pos != -1) {
    pos = ss.indexOf("9", pos + 1);
    if (pos == -1) {
        break;
    } else {
        count++;
    }
}
System.out.println("1~100以内有" + count + "个9");

在这里插入图片描述

2.12 输出1000~2000之间所有的闰年

可以被4整除且不能被100整除 或者可以被400整除

2.13 输出1~100以内所有的素数

2.14 终端输出如下图案

*____*
_*__*
__**
__**	2	0	行数-行号	2*(行号-1)	
_*__*	1	2	
*____*	0	4	
// TODO Auto-generated method stub
int num = 3;
for (int i = num; i > 0; i--) {
    for (int k = 0; k < num - i; k++) {
        System.out.print(" ");
    }
    System.out.print("*");
    for (int k = 0; k < 2 * (i - 1); k++) {
        System.out.print(" ");
    }
    System.out.println("*");
}
for (int i = 1; i <= num; i++) {
    for (int k = 0; k < num - i; k++) {
        System.out.print(" ");
    }
    System.out.print("*");
    for (int k = 0; k < 2 * (i - 1); k++) {
        System.out.print(" ");
    }
    System.out.println("*");
}

在这里插入图片描述

2.15 猜数游戏

// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int num = (int) (Math.random() * 100 + 1);
System.out.println("请输入一个1到100以内的正整数" + num);
int count = 0;
while (true) {
    count++;
    String tmpS = "";
    int tmpNum;
    try {
        tmpS = sc.next();
        tmpNum = Integer.parseInt(tmpS);
    } catch (Exception e) {
        // TODO: handle exception
        System.out.println("您输入的数据不合法请重新输入");
        continue;
    }
    if (num == tmpNum)
        break;
    if (tmpNum > num) {
        System.out.println("大了 请重新输入");
        continue;
    } else if (tmpNum < num) {
        System.out.println("小了 请重新输入");
        continue;
    }
}
System.out.println("您一共使用了" + count + "次就猜中了");

在这里插入图片描述

2.16 存钱游戏

在这里插入图片描述

// TODO Auto-generated method stub
double sum = 0;
double qian = 1;
int days = 0;
int days10 = -1;
while (true) {
    sum += qian;
    days++; // 存钱和天数加一应该是同步进行的
    // 找出多少天存了10元以上
    //			if (sum > 10.0) { 
    //				days10 = days;
    //				System.out.println(days10); // 5
    //				break;
    //			}
    if (days == 30) {
        System.out.println(sum); // 383500.1184657682
        break;
    }
    qian = qian + qian / 2;
}

2.17 10000米马拉松

在这里插入图片描述

// TODO Auto-generated method stub
int quanTime = 50;
int longMi = 10000;
int sumTime = 0;
while (true) {
    longMi -= 400; // 减少剩余米数
    sumTime += quanTime; // 统计总时间
    if (longMi < 0) {
        sumTime -= quanTime * (Math.abs(longMi) / 400);
        break;
    }
    quanTime -= 1; // 修正下一圈所需时间
}
System.out.println(sumTime); // 950

扩展小芝士

  • \t是八个字符,每八个字符一个输出区间,如果没超出八个字符则制表符会调到下一个输出区间,这里的制表符是4个空格,终端的话是8个
123	5	9
1234567	9	d	

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值