java基础练习,持续添加
1、
// 随机生成一个1-10之间的数字num,循环让用户输入猜这个数,如果用户输入的数字大于num提示输入的数字比较大,如果用户输入的数字小于num提示输入的数字比较小,直到用户输入的数字和num相等为止,然后输出用户猜数的总次数
Scanner scan= new Scanner(System.in);
Random ran= new Random();
//生成游戏答案1~100
int num = ran.nextInt(10)+1;
//System.out.println(num);
int n = 0;//定义n的初值
int i = 0;//定义猜数次数
while(n != num) {
System.out.println("请猜数字");
n=scan.nextInt();
if(n > num) {//判断猜数结果
System.out.println("输入的数字较大");
}else if(n < num) {
System.out.println("输入的数字较小");
}else {
System.out.println("恭喜您猜对了");
}
i++;//猜数次数加1
}
System.out.println("总共猜了"+i+"次");
2、
//打印出1-100之间所有不是7的倍数和不包含7的数字,并求和
int sum = 0;
for (int i = 1; i <= 100; i++) {
if(i % 7 == 0 || i / 10 == 7 || i % 10 == 7){
continue;
}else{
sum += i;
System.out.println(i);
}
}
System.out.println(sum); //3281
3、
//有一个有钱的神经病,他往银行里存钱,第一天存1元,以后每天比前一天多存50%,完成下列计算任务
//1)他存到第几天,当天存的钱会超过10元
int day = 1;
Double j;
for (j = 1.0; j <= 10; j++) {
j*=1.5;
day ++;
System.out.println(j);
}
System.out.println(day);
4、
//一个月(30天)后,他总共存了多少钱
double sum = 0;
double money = 1;
for (int i = 1; i <= 30; i++) {
sum += money;
System.out.println("第" + i + "天" + ",当天存款为:" + money);
money *= 1.5;
}
System.out.println("总计:" + Math.round(sum) );
5、
//有一个400米一圈的操场,一个人要跑10000米,第一圈50秒,其后每一圈都比前一圈慢1秒,按照这个规则计算跑完10000米需要多少秒
int minutes = 50;
int round = 10000 / 400;
int sum = 0;
for (int i = 1; i <= round; i ++ ) {
sum += minutes;
System.out.println("第" + i + "圈,所花时间:"+minutes+"秒");
minutes ++;
}
System.out.println("花的时间:"+sum);
//第25圈,所花时间:74秒
//花的时间:1550
6、
//用户输入任意一个整数,求各位数字之和
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个数字");
int i = scan.nextInt();
int sum = 0;
while (i > 0){
sum += (i%10);
i /= 10;
System.out.println(i);
}
System.out.println(sum);
//567
//56
//5
//0
//18
7、这道题看起来简单,但却有点意思
//井里有一只蜗牛,他白天往上爬5米,晚上掉3.5米,井深56.7米
//计算蜗牛需要多少天才能从井底到爬出来
int day = 0;
double sum = 0.0;
while (true){
sum += 5;
day ++;
if(sum > 56.7){
break;
}
sum -= 3.5;
}
System.out.println(day); //36
8、
//循环嵌套,求1~1000以内质数列表
//PS:质数是只能被1和自身整除的整数
int i,j;
boolean isFlag = true;
for (i = 2; i <= 100; i++) {
for (j = 2; j <= Math.sqrt(i); j++) {
if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag) {
System.out.println(i);
}
isFlag = true;
}
}
9、
//求数组中的最大值和最大值所在的下标
//int型数组转Integer数组
int[] nums={6,8,1,9,5,2,7};
//方式一:
int max = 0;
int index = 0;
for (int i = 0; i < nums.length; i++) {
if(max < nums[i]){
max = nums[i];
index = i;
}
}
//最大值
System.out.println(max); //9
System.out.println(index); //3
//输出int型数组中最大值的下标
//首先int型数组转Integer数组。boxed()装箱再转Integer数组
Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);
int maxValIndex = Arrays.asList(integers).indexOf(max);
System.out.println(maxValIndex); //3
//求最大值方式二:
int maxVal = Arrays.stream(nums).max().getAsInt();
System.out.println(maxVal); //9
10、
//(选做)向一个长度为10的整型数组中随机生成10个0~9的随机整数,完成下列任务
//1)统计每个数字出现了多少次
//2)输出出现次数最多的数字
//3)输出只出现一次的数字中最小的数字
Random r = new Random();
// 1. 声明源数组,包含10个0-9之间的随机数
int[] src = new int[10];
// 2. 声明一个标记数组,存放的是0-9,10个数字
int[] flag = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 3. 声明一个用来统计标记数组中数字在源
// 数组中的个数
int[] count = new int[flag.length];
// 4. 给源数组赋值0-9之间的随机数
for (int i = 0; i < src.length; i++) {
src[i] = r.nextInt(10);
}
// 5. 统计标记数组中的每个元素在源数组中
// 有多少个即给count数组赋值
for (int i = 0; i < flag.length; i++) {
for (int j = 0; j < src.length; j++) {
// 如果标记数组中的数字在源数组中有,则count+1
if (flag[i] == src[j]) {
count[i]++;
}
}
}
// 6. 输出src和count的数据
System.out.println("随机产生的数据如下:");
System.out.println(Arrays.toString(src));
// System.out.println(Arrays.toString(count));
// a.统计每个数字出现的次数
// 如果count中的元素的值大于0,则输出其下标和值
for (int i = 0; i < count.length; i++) {
if (count[i] > 0) {
System.out.println("数字" + i + "出现" + count[i] + "次");
}
}
// b.输出出现最多次数的数字
// 假设第一个统计的数字就是最多那个
int max = count[0];
int index = 0;
for (int i = 0; i < count.length; i++) {
if (count[i] > max) {
max = count[i];
index = i;
}
}
System.out.println("出现次数最多的数字是" + index);
System.out.println("出现次数最多的数字是" + flag[index]);
// c. 输出只出现一次的数字中最小的数字
for (int i = 0; i < count.length; i++) {
if (count[i] == 1) {
System.out.println("出现1次的数字中最小的是" + i);
break;
}
}
11、
//题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
//小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,键盘输入月份,问兔子对数为多少?
//程序分析:这是一个菲波拉契数列问题,兔子的规律为数列1,1,2,3,5,8,13,21
Scanner scanner = new Scanner(System.in);
System.out.println("输入整数");
int month = scanner.nextInt();
int tot = 0;
int a = 0;
int b = 1;
for(int j = 1; j <= month; j++){
tot = a+b;
a = b;
b = tot;
System.out.println("第"+j+"个月兔子数量为:" + a);
}
//输入10
//第8个月兔子数量为:21
//第9个月兔子数量为:34
//第10个月兔子数量为:55
//方式二:
System.out.println(fun(month)); //55
}
private static int fun(int n) {
if(n == 1 || n == 2){
return 1;
}else{
return fun(n-1) + fun(n-2);
}
}
//理解:n=1或n=2时为1,而n-1(前一位)和n-2(前两位)相加等于n, 1 1 2 3 5 8... 3+5=8
12、
//将一个正整数分解质因数。例如:输入90,打印出