Java练习题(经典8题) 共有50枚硬币,可能包括4种类型:1元,5角,1角,5分。已知总价值为20元。求各种硬币的数量。

这篇具有很好参考价值的文章主要介绍了Java练习题(经典8题) 共有50枚硬币,可能包括4种类型:1元,5角,1角,5分。已知总价值为20元。求各种硬币的数量。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目一

共有50枚硬币,可能包括4种类型:1元,5角,1角,5分。已知总价值为20元。求各种硬币的数量。

解题思路:简单分析可知硬币有多种组合,我们可以假设先抛开50枚硬币去寻找1元需要多少个硬币(明显是20个就满足),5角(40个),1角(200个),5分(400个)。最后我们在最内层循环加上50枚硬币的条件即可。

public class Test1 {
    public static void main(String[] args) {
        //寻找5分钱
        for (int i = 0; i <= 400; i++) {
            //寻找1角钱
            for (int j = 0; j <= 200; j++) {
                //寻找5角钱
                for (int k = 0; k <= 40; k++) {
                    //寻找1元
                    for (int l = 0; l <= 20; l++) {
                        if (i * 5 + j * 10 + k * 50 + l * 100 == 2000 && i+j+k+l == 50){
                            System.out.println(i+"个5分"+j+"个1角"+k+"个5角"+l+"个1元");
                        }
                    }
                }
            }
        }
    }
}

题目二

        鸡兔同笼问题:鸡兔一共35只,笼子里脚共有94只,请问分别有多少只鸡和多少只兔子。

解题思路:因为Java的特性变量必须要初始化,所以二元一次方程组的解法就不灵了,我们可以假设最开始鸡只有0只,进行for循环从1加到35

public class Test2 {
    public static void main(String[] args) {
        for (int chick = 1; chick <= 35; chick++) {
            //记录兔子的数量(利用脚的数量算出兔子的数量)
            int rabbit = (94 - chick * 2) / 4;
            //如果遍历到兔子的数量加上鸡的数量等于总数量就可以break啦
            if (chick + rabbit == 35){
                System.out.println("鸡有" + chick + "只");
                System.out.println("兔有" + rabbit + "只");
                break;
            }
        }
    }
}

题目三

        求1-2022有多少个质数(只有1和它本身两个因数)。

        这题虽然简单但是第一见到不一定写的出来,有一些细节需要注意,比如count - 1 

public class Test3 {
    public static void main(String[] args) {
        //记录数量
        int count = 0;
        for (int i = 1; i <= 2022; i++) {
            //用于判断是否为质数
            boolean isSum = true;
            //从2到根号i寻找数字并判断能否被整除
            //因为因数是成对存在的,如果i从2到根号i之间都没有因数
            //那么在根号i之后也没有因数
            for (int j = 2; j <= Math.sqrt(i); j++) {
                //如果能被整除表明不是质数,就可以break
                if (i % j == 0){
                    isSum = false;
                    break;
                }
            }
            //遍历完1-2022所有数字,判断有多少个true(用count记录)
            if (isSum){
                count++;
            }
        }
        //因为1不是质数是整数,这里需要-1
        System.out.println(count - 1);
    }
}

题目四

        求两个数的最大公约数(两个数中存在一个最大同时被两个数整除),最小公倍数(两个数拥有最小并相同的倍数)。

         这题虽然也简单,但是第一次遇到还是挺难写出来的。

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        //求最大公约数,需要定义临时变量
        int temp = 0;
        while (true){
            //不断取余寻找因数
            temp = num1 % num2;
            //将因数赋给num1
            num1 = num2;
            //将num2置为余数
            num2 = temp;
            //直到余数为0,此时的num1就是最大公约数
            if (num2 == 0){
                System.out.println("最大公约数是" + num1);
                break;
            }
        }
        //num1 num2的值已经发生改变,这里定义新变量计算最小公倍数
        int num3 = scanner.nextInt();
        int num4 = scanner.nextInt();
        //先找出num3,num4之间的最大数
        temp = Math.max(num3,num4);
        //在两数最大到两数乘积之间寻找最小公倍数
        for (int i = temp; i <= num3 * num4; i++) {
            //公倍数条件
            if (i % num3 == 0 && i % num4 == 0){
                System.out.println("最小公倍数是" + i);
                //找到的第一个满足条件的数就是最小公倍数
                break;
            }
        }
    }
}

题目五

        打印九九乘法表

对于刚接触的小伙伴来说可能是有难度的,这里我们可以换一个需求先实现打印9个*********

System.out.print("*********")[这个属于犯规],正确的是:
    for (int i = 0; i < 10; i++) {
            System.out.print("*");
        }

我们再提高要求实现:

*
**
***
****
*****
******
*******

        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

如果看不懂没关系,这段代码可以拆分成以下代码

        for (int i = 0; i < 1; i++) {
            System.out.print("*");
        }
        System.out.println();
        for (int i = 0; i < 2; i++) {
            System.out.print("*");
        }
        System.out.println();
        for (int i = 0; i < 3; i++) {
            System.out.print("*");
        }
        System.out.println();
        for (int i = 0; i < 4; i++) {
            System.out.print("*");
        }
        System.out.println();
        for (int i = 0; i < 5; i++) {
            System.out.print("*");
        }
        System.out.println();
        for (int i = 0; i < 6; i++) {
            System.out.print("*");
        }

 所以最终的代码就是这样:

public class Test5 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                //\t是为了好看
                System.out.print(i + "*" + j + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }
}

 题目六

        有一个n*m的棋盘,现在对这个棋盘进行黑白染色,左上角染成黑色。从左上角开始,每个黑色格的相邻格染成白色,白色格的相邻格染成黑色。 以下给出了一个5*7的棋盘的染色示例。 给定n和m,请问棋盘上一共有多少方格被染成了黑色。

题目的意思大概是这样。

解题思路:这里需要利用二维数组来理解这题,我们可以假设1就是黑色,0就是白色。然后再遍历这个二维数组,遇到1我们就计数

 这段代码可以帮助理解解题思路:

public class Test6 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int[][] arr = new int[n][m];
		int count = 0;
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m ; j++) {
				//奇数行的规律
				if(j % 2 == 0 && i % 2 == 0) {
					//表示黑色
					arr[i][j] = 1;
				}
				//偶数行的规律
				else if(i % 2 != 0 && j % 2 != 0){
					//表示黑色
					arr[i][j] = 1;
				}
			}
		}
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m; j++) {
				if(arr[i][j] == 1) {
					count++;
				}
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
		System.out.println(count);
		scanner.close();
	}

}

其实我们在"上色的时候就可以计数了",所以代码可以简化一下(省略上色):

public class Test6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] arr = new int[n][m];
        int count = 0;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m ; j++) {
                //奇数行的规律
                if(j % 2 == 0 && i % 2 == 0) {
                    count++;
                }
                //偶数行的规律
                else if(i % 2 != 0 && j % 2 != 0){
                    count++;
                }
            }
        }
        System.out.println(count);
    }
}

题目七

        在1至2022中,有多少个数的数位中包含数字9?   注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。

解题思路:把1-2022转换字符串,再利用indexOf方法判断。

String.valueof()方法:将int类型转换成String类型。

str.indexOf()方法:返回指定子字符串在此字符串中第一次出现处的索引,如果没有返回-1。

public class Test7 {
    public static void main(String[] args) {
        //记录数量
        int count = 0;
        for (int i = 1; i <= 2022; i++) {
            //将整数i转换成字符串
            String str = String.valueOf(i);
            //利用String类的indexOf方法
            //返回指定子字符串在此字符串中第一次出现处的索引,如果没有返回-1。
            if (str.indexOf("9")!=-1){
                    count++;
            }
        }
        System.out.println(count);
    }
}

题目八

        判断水仙花数,例如153 = 1*1*1 + 5*5*5 + 3*3*3

        求1-2022有多少个水仙花数

解题思路:关键就是表达个位,百位,千位的数。文章来源地址https://www.toymoban.com/news/detail-440484.html

public class Test8 {
    public static void main(String[] args) {
        //记录个数
        int count = 0;
        for (int i = 1; i <= 2022; i++) {
            //表示个位
            int bits = i % 10;
            //表示十位
            int ten = i / 10 % 10;
            //表示百位
            int hundred = i / 100 % 10;
            //水仙花数条件
            if(bits * bits * bits + ten * ten * ten + hundred * hundred * hundred == i){
                count++;
            }
        }
        System.out.println(count);
    }
}

有错误欢迎指出!

到了这里,关于Java练习题(经典8题) 共有50枚硬币,可能包括4种类型:1元,5角,1角,5分。已知总价值为20元。求各种硬币的数量。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sql-50练习题16-20

    sql真的非常灵活,一个题目可能有很多很多种解法,我记录的只是我自己的一个解题思路,如果大家有更好的不同解法欢迎在评论区一起探讨 ps:有些题可能解法会重复,比如求大于,我们下一个题可能是求小于,大家如果第一遍没有做出来,看了我写的之后有了思路,可以

    2024年02月06日
    浏览(38)
  • sql-50练习题11-15

    sql真的非常灵活,一个题目可能有很多很多种解法,我记录的只是我自己的一个解题思路,如果大家有更好的不同解法欢迎在评论区一起探讨 ps:有些题可能解法会重复,比如求大于,我们下一个题可能是求小于,大家如果第一遍没有做出来,看了我写的之后有了思路,可以

    2024年02月06日
    浏览(33)
  • SQL经典练习题

    1.学生表 Student(SId,Sname,Sage,Ssex) SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CId,Cname,TId) CId 课程编号,Cname 课程名称,TId 教师编号 3.教师表 Teacher(TId,Tname) TId 教师编号,Tname 教师姓名 4.成绩表 SC(SId,CId,score) SId 学生编号,CId 课程编号,score 分数 学生表 Studen

    2024年01月20日
    浏览(69)
  • 【c语言】五道经典练习题④

      目录 ①、年月日经过n天后的日期  ②、坐标排序 ③、统计文件中出现某个单词的次数 ④、输出含for的行 ⑤、比较两个文本是否相等 题述: 定义包含年月日表示的日期的结构体,写程序实现计算某年某月某日过n天后的日期是哪年哪月哪日 思路: 1、 这种题因为关于年了

    2024年02月10日
    浏览(31)
  • 【数据结构(四)】链表经典练习题

    ❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵 关注我带你学更多数据结构知识 在上一篇文章中博主已经介绍了链表的基础知识,什么是链表,如何实现一个链表,以及LinkedList的操作方法,那么在这篇文章中通过一些链

    2024年04月22日
    浏览(34)
  • 【计算机网络】子网划分(经典基础练习题)

    一、某主机IP地址为110.35.2.68,子网掩码为255.255.255.128,求网络地址? 二、有A类网络18.0.0.0的子网掩码为255.128.0.0,请问可以划分为多少个子网? 并写出每个子网的子网号?  三、将C类网119.181.25.0划分为8个子网,请计算出每个子网有效的主机IP地址范围和对应的子网掩码。

    2024年01月20日
    浏览(36)
  • MySQL基础篇 | 经典三十四道练习题

    ✅作者简介:大家好我是@每天都要敲代码,希望一起努力,一起进步! 📃个人主页:@每天都要敲代码的个人主页 🔥系列专栏:MySQL专栏 目录 1. 取得每个部门最高薪水的人员名称 2. 哪些人的薪水在部门的平均薪水之上 3. 取得部门中(所有人的)平均的薪水等级 4. 用不同的

    2024年02月01日
    浏览(31)
  • 蓝桥杯python比赛历届真题99道经典练习题 (61-70)

    【程序61】 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 【程序62】 题目:学习putpixel画点。 1.程

    2024年02月03日
    浏览(30)
  • 10 SQL进阶 -- 综合练习题 -- 10道经典SQL题目,配套数据与解答

    点击下方链接直接下载 创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/create_table.sql 执行建表语句 执行成功 查看创建的表 点击下方链接直接下载 插入数据脚本:https://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/data.zip 大家下载好脚本后,先在MySQL环境中运

    2024年04月27日
    浏览(31)
  • 【Java练习题汇总】《第一行代码JAVA》综合测试三,汇总Java练习题

    线程的启动方法是( )。 A. run() B. start() C. begin() D. accept() Thread 类提供表示线程优先级的静态常量,代表普通优先级的静态常量是( )。 A. MAX_PRIORITY B. MIN_PRIORITY C. NORMAL_PRIORITY D. NORM_PRIORITY 设置线程优先级的方法是( )。 A. setPriority() B. getPriority() C. getName() D. setName() 下面 ( )方法是

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包