1、统计字符串次数
package com.zcl.Demo3;
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
/*
需求:
判断键盘录入的字符串有多少个大写、小写、数字
思路:
声明三个记录不同字符的变量
大写(CH>='A'&&CH<='Z')
小写(ch>='a'&&ch<='z')
数字(ch>='0'&&ch<='9')
每执行条件一次就会对变量加1
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入判断字符内容");
String line = sc.nextLine();
int small = 0; // 小写
int max = 0; // 大写
int sum = 0; // 数字
// 遍历字符串
for(int i = 0; i<line.length();i++){
char ch = line.charAt(i);
// 判断字符类型
if(ch>='A'&&ch<='Z'){
small++;
}else if(ch>='a'&&ch<='z'){
max++;
}else if(ch>='0'&&ch<='9'){
sum++;
}
}
// 输出变量数
System.out.println("字符中包含小写字母有:"+small+"个");
System.out.println("字符中包含大写字母有:"+max+"个");
System.out.println("字符中包含数字有:"+sum+"个");
}
}
2、打印水仙花数
package com.zcl.Demo3;
public class Demo3 {
public static void main(String[] args) {
/*
需求:
打印数水仙花数
水仙花数是一个三位数,个位、十位、百位的数字立方和等于原数
思路:
三位数的个位如何求:
371 个位 1就是原始数字对10进行取余运算的结果 371%10=1
三位数的百位数字如何获得
371 百位3 就是原始数字除于100的结果(整除) 371/100 = 3
三位数的十位数字如何获取到
371 十位7 就是通过除于10,可以将7移到个位上(整除) 371/10=37
37通过对10进行取余运算可以得到最后一位的值7 371/10%10=7
个位上的值如何取到
先使用整除操作将要求数字移到到个位上,再使用取余操作取出最后一位上的值
123456789 先整除10000得到12345,再对10区域得到5
分析:
输出所有的水仙花数,使用到循环,遍历所有的三位数,100开始到999结束
不是所有的三位数都是水仙花数,需要判断满足的数字才能进行输出
判定条件是将三位数中的每一位值取出来,计算立方和与原始数字进行比较是否相等
在计算之前获得三位数中每个位上的值
*/
// 遍历三位数
for(int i=100;i<1000;i++){
// 计算之前获取到三位数中每个位上的值
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
// 判断条件是将三位数中的每一位数值取出来,计算立方和与原始数字进行比较是否相等
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
// 输出水仙花数
System.out.println("水仙花数位:"+i);
}
}
}
}
3、逢七过
package com.zcl.Demo3;
public class Demo4 {
public static void main(String[] args) {
/*
需求:
规则:从任意一个数字开始报数,当报到7或者7的倍数时就要过
打印1-1000的逢七过数据
思路:
数据在1-100之间,用for循环实现
根据规则,用if语句实现数据的判断:要么个位是7, 要么十位是7,要么被7整除
x%10==7 x/10%10==7 x%7==0
*/
for(int x = 1; x<=100;x++){
if(x%10==7||x/10%10==7||x%7==0){
System.out.println("逢七过的数字有:"+x);
}
}
}
}
4、不死神兔
package com.zcl.Demo3;
public class Demo5 {
public static void main(String[] args) {
/*
需求:
有一对兔子,从出生三个月起每一个月都生一个兔子,小兔子长到三个月后每个月
又生一对兔子,加入兔子不死,问第二十个月的兔子对数有多少
规律:
一:1
二:1
三:2 从第三个数据开始,每一个数据是前面两个数据之和,第一和第二是已知的
四:3
五:5 arr[0]=1 arr[1]=1 arr[2]=arr[0]+arr[1]
思路:
为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20
因为第一、二个月的兔子对数是已知的都是1,所以第一、二数组元素值也是1
用循环实现计算每一个月兔子的对数
输出数组中最后一个元素的值,就是第20个月的兔子对数
*/
// 定义数组的长度
int[] arr = new int[20];
// 第一、二个月的个数已知为1
arr[0]=1;
arr[1]=1;
// 循环计算每个月的个数
for(int x=2;x<arr.length;x++){
/*
arr[2]=arr[2-2]+arr[2-1]
arr[3]=arr[3-2]+arr[3-1]
arr[4]=arr[4-2]+arr[4-1]
*/
arr[x]=arr[x-2]+arr[x-1];
}
// 输出第20个月的兔子对数
System.out.println("第二十个月的兔子对数为:"+arr[19]); // 6765
}
}
5、百钱百鸡
package com.zcl.Demo3;
public class Demo6 {
public static void main(String[] args) {
/*
需求:
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡,问鸡翁、鸡母,鸡雏各几何
分析:
假设鸡翁x只,鸡母y只,鸡雏z只,则下面的成立
x+y+z=100
5*x+3*y+z/3=100
如果是单独的鸡型
0<=x<=20
0<=y<=33
0<=z<=100
思路:
第一层循环,用户表示鸡翁的范围,初始化表达式的变量定义为x=0,判断条件是x<=20
第二层循环,用户表示鸡母的范围,初始化表达式的变量定义为y=0,判断条件是y<=33
这个时候,用于表示鸡雏的变量z=100-x-y
判断表达式z%3==0和表达式5*x+3*y+z/3=100是否成立,如果成立,输出对应的x,y,z值
就是对应的鸡翁、鸡母、鸡雏的值
*/
for(int x = 0;x<=20;x++){
for(int y=0;y<=33;y++){
int z = 100-x-y;
if(z%3==0&&5*x+3*y+z/3==100){
System.out.println("鸡翁有:"+x+",鸡母有:"+y+",鸡雏有:"+z);
}
}
/*
鸡翁有:0,鸡母有:25,鸡雏有:75
鸡翁有:4,鸡母有:18,鸡雏有:78
鸡翁有:8,鸡母有:11,鸡雏有:81
鸡翁有:12,鸡母有:4,鸡雏有:84
*/
}
}
}