Java练习题(经典8题)

article/2025/10/25 3:49:12

题目一

共有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++) {//如果能被整除表明不是质数,就可以breakif (i % j == 0){isSum = false;break;}}//遍历完1-2022所有数字,判断有多少个true(用count记录)if (isSum){count++;}}//因为1不是质数是整数,这里需要-1System.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;//将因数赋给num1num1 = 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有多少个水仙花数

解题思路:关键就是表达个位,百位,千位的数。

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);}
}

有错误欢迎指出!


http://chatgpt.dhexx.cn/article/WkDrDwmi.shtml

相关文章

Java中常见的30道例题(附代码)

目录 第一题&#xff1a;判断数组中奇数偶数的个数并求和 第二题&#xff1a;判断三个数中的最大值 第三题&#xff1a;剔除某些数据并打印输出 第四题&#xff1a;输入0到7判断星期几 第五题&#xff1a;将一个数组倒序输出 第六题&#xff1a;输入一个数判断是否是素数 …

Linux内核编译详细总结

一、实验目的 学习重新编译Linux内核&#xff0c;理解、掌握Linux内核和发行版本的区别。 二、实验内容 在Linux操作系统环境下重新编译内核。实验主要内容&#xff1a; A. 查找并且下载一份内核源代码&#xff0c;本实验使用最新的Linux内核2.6.36。 B. 配置内核。 C. 编…

LINUX内核目录文件说明以及配置并编译内核的方法

在下载内核前&#xff0c;我们应该讨论一些重要的术语和事实。Linux内核是一个宏内核&#xff0c;这意味着整个操作系统都运行在内核预留的内存里。说的更清楚一些&#xff0c;内核是放在内存里的。内核所使用的空间是内核预留的。只有内核可以使用预留的内核空间。内核拥有这些…

Linux内核的编译、安装、调试

这里写目录标题 编译安装内核下载内核安装依赖更改.config编译内核安装首先安装模块安装内核更改引导更改grub重启 其他操作清理内核源目录卸载安装的内核修改内核配置菜单实现对新加入内核源码的控制 常见问题1. Module.symvers is missing2. No rule to make target ‘debian…

linux内核编译及添加系统调用(详细版)

linux内核编译及添加系统调用 注&#xff1a;文章共四部分&#xff0c;分别是 1、编译更换内核 2、添加一个简单系统系统调用 3、添加读取/修改nice值的系统调用 4、自己设计简单&#xff08;真的简单&#xff09;系统调用 注&#xff1a;四个部分结构相似&#xff0c;请…

打造自己的专属linux(四):Linux内核编译过程简介

linux在前不久刚发布了最新的3.0内核&#xff0c;在linux的学习中&#xff0c;了解内核的编译是一个必不可少的功课。前几天&#xff0c;学习了linux内核的编译流程&#xff0c;在此总结下&#xff0c;大家来一起学习。 以最新的3.0内核为例&#xff0c;我下载的是linux3.0.1 …

Linux内核开发_1_编译LInux内核

目录 1. 准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2. Linux内核配置 2.1 配置选项 1. make config 2. make menuconfig 3. make gconfig 3 开始配置 1. 配置解释 General setup 通用选项 Enable loadable module support…

ubuntu上编译Linux内核步骤

一、虚拟机的准备 1.下载Ubuntu镜像 Enterprise Open Source and Linux | Ubuntu 在最左边Ubuntu Desktop处点22.04LTS下载iso文件 2.在VMware上创建新的虚拟机 Ubuntu 20.04 虚拟机安装教程_柯基的博客-CSDN博客_虚拟机安装ubuntu20.04 特别注意: 在"指定磁盘容量&…

Microsoft Outlook 2019 for mac(电子邮件和日历工具) v16.45Beta中文激活版

Microsoft Outlook 2019 for Mac版是一款非常好用的电子邮件和日历工具&#xff0c;Outlook是office办公软件套装的组件之一&#xff0c;可以帮助您收发电子邮件、管理联系人信息、记日记、安排日程与分配任务&#xff0c;文件视图&#xff0c;保持连接并提升生产效率等.

取消Outlook脱机工作

在运维过程中&#xff0c;有时候会收到用户这样的抱怨&#xff1a;为什么别人发给我的邮件我都收不到&#xff0c;我的邮件也发不出去了&#xff1f; 这种情况有时候是因为Outlook正在脱机工作&#xff0c;在Outlook右下角可以看到这样的信息&#xff1b; 针对这种情况&#x…

Outlook 365 添加企业Exchange邮箱(亲测)

关注公众号及时获取文章更新 前言&#xff1a;Outlook 是微软免费的电子邮件和日历管理工具&#xff0c;在日常工作中&#xff0c;经常需要以邮件的形式来传递信息和文件&#xff0c;是一种必不可少的沟通方式。 问题&#xff1a;在使用Outlook 365 直接配置企业Exchange邮箱时…

安装Windows Outlook邮箱客户端

本文以安装Outlook2010为例。下载iso文件 ed2k://|file|SW_DVD5_Office_Professional_Plus_2010w_SP1_64Bit_ChnSimp_CORE_MLF_X17-76742.iso|1612515328|032320121E0EE36D8F0C32EC89CA0AB9|/ 打开下载好的iso文件点击“steup”进入安装界面。 然后在新的界面里勾上“我接受此…

WIN10设置OUTLOOK开机自启

转载&#xff1a;https://www.cnblogs.com/catherinehu/p/14266890.html 由于开机总是忘记打卡outlook&#xff08;主要是懒&#xff09; 于是想搞个自启动&#xff0c;应该也是很简单 结果在网上搜索了很多 并在多次尝试了之后 并没有成功...... 网上能搜索到的最多的办…

outlook添加账号后,版本更新,无法连接的问题

outlook添加账号后&#xff0c;版本更新&#xff0c;无法连接的问题 必须的版本&#xff1a;16.0.4600.1000 网上关于这个问题的回复 我发现回复的答案中的链接中没有合适更新包 我找到的可以用的下载连接

1、登录——邮件发送激活链接

我们在这里输入账号、密码、邮箱后&#xff0c;后端的service层会判断账号、邮箱是否已被注册。如果没有&#xff0c;则会向邮箱中发送激活链接 在我们点击注册按钮之后&#xff0c;在service层中存入数据库&#xff0c;然后通过数据库中用户的id&#xff0c;来生成激活链接&…

Windows10-Outlook使用教程

介绍 Microsoft Office Outlook是微软办公软件套装的组件之一&#xff0c;它对Windows自带的Outlook express的功能进行了扩充。Outlook的功能很多&#xff0c;可以用它来收发电子邮件、管理联系人信息、记日记、安排日程、分配任务。最新版为Outlook 2020。 我公司自己搭建…

office(word、powerpoint、excel、outlook、onenote、publisher、access)下载安装(由于卡顿打不开重装,已激活)

一、打开以下网址 https://account.microsoft.com/services/ 二、登录账户 在已购买的产品&#xff08;买电脑时送的&#xff09;中选择安装下载 三、office下载安装 下载&#xff08;以下为使用IDM下载&#xff0c;正常情况下直接下载&#xff09; 下载后&#xff0c;双击…

win10 outlook邮件设置

首先在控制面板下–>用户账户–>选择outlook 邮箱设置 邮件设置选择配置文件 选择添加新配置文件 输入邮箱账户密码配置 点击下一步再次输出密码便可生成配置文件 可返回常规设置选择配置文件作为默认系统邮箱 再次打开outlook会显示所配置的邮箱以及所收到的邮件 注释&a…

Outlook2019版本的收发邮件设定

Outlook2019版本的收发邮件设定 邮件设置&#xff1a;1.进入Outlook2019界面&#xff0c;选择规则&#xff0c;选择管理规则及通知。选择新增规则。2.检查条件不用选择&#xff0c;直接按下一步。3.处理邮件方式勾选 “移动到特定资料夹”&#xff0c;该资料夹请选择你本机个人…