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