JAVA基础编程50题(4-6题)具体解释
一、描写叙述
1、将一个正整数分解质因数。比如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完毕:
(1)假设这个质数恰等于n,则说明分解质因数的过程已经结束,输出之前的全部因子。
(2)假设n!=k,但n能被k整除。则应打印出k的值,并用n除以k的商作为新的正整数n,反复运行第一步。
(3)假设n不能被k整除,则用k+1作为k的值,反复运行第一步。
2、利用条件运算符的嵌套来完毕此题:学习成绩>=90分的同学用A表示。60-89分之间的用B表示,60分下面的用C表示。
程序分析:(a>b)?a:b这是条件运算符的基本样例。
3、输入两个正整数m和n。求其最大公约数和最小公倍数。
二、源码
1、程序1
package tong.yue.hong; import java.util.Scanner;
/*
* 题目:将一个正整数分解质因数。 比如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数。应先找到一个最小的质数k,然后按下述步骤完毕:
(1)假设这个质数恰等于n,则说明分解质因数的过程已经结束,打印出就可以。
(2)假设n<>k,但n能被k整除。则应打印出k的值,并用n除以k的商,作为新的正整数n,反复运行第一步。 (3)假设n不能被k整除,则用k+1作为k的值,反复运行第一步。
*/ public class Zhiyinshu { public static void main(String[] args) {
System.out.println("Please input a number bigger than one:");
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
while (num<=1) {
System.out.println("input number error,please input again! ");
num = scan.nextInt();
}
decompose(num);
decompose2(num); }
/**
* 使用字符串的拼接
* @param n
*/
private static void decompose(int n){
System.out.print(n+"=");
for(int i=2;i<=n;i++){
while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
}
if(n==i){
System.out.println(i);
break;
}
}
}
/**
* StringBuilder将输出结果格式化
* @param num
*/
private static void decompose2(int num){
StringBuilder sBuilder = new StringBuilder();
sBuilder.append(num+"=");
int i = 2;
while(num!=1){
if(num%i==0){
sBuilder.append(i+"*");
num /=i;
}else {
i++;
}
}
String resulString=sBuilder.toString();
System.out.println(resulString.substring(0, resulString.length()-1));
} }
运行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG9uZ3l1ZWhvbmcxMzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="质因数结果">
2、程序2
package tong.yue.hong; import java.util.Scanner; /**
* 题目:利用条件运算符的嵌套来完毕此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示。60分下面的用C表示。 程序分析:(a>b)?a:b这是条件运算符的基本样例。 * @author Administrator
*
*/
public class GradeLevel { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.println("Please input a score:(0-100)");
int score = scanner.nextInt();
while(score<0||score>100){
System.out.println("Input score error,please input a score again:");
score = scanner.nextInt();
}
//条件运算符的嵌套,假设大于等于90分就输出等级A。否则继续推断是否大于等于60,若是则是B。否则为C
String level = score>=90?"A":score>=60?"B":"C";
System.out.println(score+"分的等级为"+level); } }
执行结果:
3、程序3
package tong.yue.hong; import java.util.Scanner; /**
* 输入两个正整数m和n。求其最大公约数和最小公倍数。 * @author tong
*
*/
public class CommonDivMulpi { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Please input the first number(num>0):");
int firstNum = scanner.nextInt();
while(firstNum<0){
System.out.println("Input error,Please input the first number again(num>0):");
firstNum = scanner.nextInt();
} System.out.println("Please input the second number(num>0):");
int secondNum = scanner.nextInt();
while(secondNum<0){
System.out.println("Input error,Please input the second number again(num>0):");
secondNum = scanner.nextInt();
}
//假设两个数相等,则最小公倍数就是当中之中的一个。无需调用方法推断
if (firstNum==secondNum) {
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+firstNum);
greatCommonDivisor(firstNum,secondNum);
}else {
leastCommonMultiple(firstNum,secondNum);
greatCommonDivisor(firstNum,secondNum);
}
max_min(firstNum,secondNum); }
/**
* 求最小公倍数:首先获取该两个数的较大者。若两者中的较大者是较小者的倍数,则该较大者则为两数最小公倍数
* 本代码採用列举倍数法:假设两者不成倍数关系,则取较大数的倍数(从2開始一次往上添加),
* 用该数除以较小的数。假设能够整除。该数就是要求者,否则继续取倍数反复以上部分
* 比如:12与20的最小公倍数,20不能整除12。将20*2=40,40不能整除12 。将20*3=60。此时60能够整除12,所以二者最小公倍数为60
* @param firstNum
* @param secondNum
*/
private static void leastCommonMultiple(int firstNum, int secondNum) {
//推断两者中的较大者
if (firstNum>secondNum) {
if (firstNum%secondNum==0) {
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+firstNum);
}else {
//若两个数互质,那么最坏的情况就是公倍数是两者的乘积
for (int i = 2; i <= secondNum; i++) {
if (firstNum*i%secondNum==0) {
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+firstNum*i);
break;
}
}
} }else {
if (secondNum%firstNum==0) {
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+secondNum);
}else {
//若两个数互质,那么最坏的情况就是公倍数是两者的乘积
for (int i = 2; i <= firstNum; i++) {
if (secondNum*i%firstNum==0) {
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+secondNum*i);
break;
}
}
} }
}
/**
* 最大公约数求法:若两数成倍数关系。则较小的那个数就是最大公约数
* 否则,较小数循环除以较小数之的全部因子(从小到大)的结果去循环除较大数,假设能整除,该数就是最大公约数。否则继续循环
* 比如:36和10求最大公约数。36不是10的倍数,则用较小数10的因子去除较小数,除后结果去除36。则用36%(10/2)=36%5无法整除,36%(10/5)=36%2==0整除,所以最大公约数是2
* @param firstNum
* @param secondNum
*/
private static void greatCommonDivisor(int firstNum, int secondNum) { //推断两者中的较大者
if (firstNum>secondNum) {
if (firstNum%secondNum==0) {
System.out.println(firstNum+"和"+secondNum+"的最大公约数为"+secondNum);
}else {
//若两个数互质。那么最坏的情况就是最大公约数是1
for (int i = 2; i <= secondNum; i++) {
//取出较小数的因子
if (secondNum%i==0&&firstNum%(secondNum/i)==0) {
System.out.println(firstNum+"和"+secondNum+"的最大公约数为"+(secondNum/i));
break;
}
}
} }else {
if (secondNum%firstNum==0) {
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+firstNum);
}else {
//若两个数互质,那么最坏的情况就是最大公约数是1
for (int i = 2; i <= secondNum; i++) {
//取出较小数的因子
if (firstNum%i==0&&secondNum%(firstNum/i)==0) {
System.out.println(firstNum+"和"+secondNum+"的最大公约数为"+(firstNum/i));
break;
}
}
} } } /**
* 求最大公约数和最小公倍数,使用辗转除法,同一时候求最大公约数和最小公倍数
* 当中最大公约数是该两个数中全部同样因子的乘积。而最小公倍数则是全部同样的分解因子和各自特有的因子的乘积
* @param m
* @param n
*/ private static void max_min(int firstNum, int secondNum){
int m = firstNum;
int n = secondNum;
int temp = 1;
int yinshu = 1;
int beishu = m*n;
//将两数中的较小者放在前面
if(n<m){
temp = n;
n = m;
m = temp;
}
//使用辗转除法
while(m!=0){
temp = n%m;
n = m;
m = temp;
}
yinshu = n;
beishu /= n;
System.out.println(firstNum+"和"+secondNum+"的最大公约数为"+yinshu);
System.out.println(firstNum+"和"+secondNum+"的最小公倍数为"+beishu);
} }
执行结果:
JAVA基础编程50题(4-6题)具体解释的更多相关文章
- JAVA基础编程50题(10-12题)具体解释
一.描写叙述 1.一球从m米高度自由落下.每次落地后反跳回原高度的一半:再落下,求它在 第n次落地时.共经过多少米?第10次反弹多高? 2.有1.2.3.4个数字.能组成多少个互不同样且无反复数字的三 ...
- Java经典逻辑编程50题
Java经典逻辑编程50题 2016-11-03 09:29:28 0个评论 来源:Alias_fa的博客 收藏 我要投稿 [程序1] 題目:古典问题:有一对兔子,从出生后第 ...
- 6、50道JAVA基础编程练习题跟答案
50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析 ...
- 50道JAVA基础编程练习题
50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...
- 50道JAVA基础编程练习题 - 题目
50道JAVA基础编程练习题[1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [2]题目:判断 ...
- MQ java 基础编程
MQ java 基础编程 编写人:邬文俊 编写时间 : 2006-2-16 联系邮件 : wenjunwu430@gmail.com 前言 通过 2 个多星期对 MQ 学习,在 partner 丁 & ...
- JAVA基础——编程练习(二)
JAVA编程练习(二) 今天我为了巩固之前的java基础知识的学习,再次进行实战演习,编写了一个小小的java控制台程序,主要是运用java面向对象的思想来完成这个小项目. 一.项目背景介绍 根据所学 ...
- Java经典逻辑编程50题 (转)
注: 转自https://blog.csdn.net/Alias_fa/article/details/52985112 (摘了题目部分和部分分析,想看原作代码的见原作链接) [程序1] 題目:古典 ...
- java基础编程题练习(一)
1.编程实现用户输入4个整数,按从大到小的顺序排列输出. 思路:将输入的数据存入数组,使用冒泡排序对数组数据进行排序后输出数组 冒泡排序的代码如下: import java.util.Scanner; ...
随机推荐
- Revit API创建墙的保温层修改墙厚度
start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] / ; ; ...
- C#编程小结----集合的小小总结
集合的小结 以上文章介绍了如何处理不同类型的集合,数组的大小是固定的,但可以使用列表作为动态增长的集合.队列以先进先出的方式访问元素.栈以后进先出的方式访问元素.链表可以快速的插入和删除元素,但搜索操 ...
- Android中的Audio播放:竞争Audio之Audio Focus的应用
from://http://blog.csdn.net/thl789/article/details/7422931 Android是多任务系统,Audio系统是竞争资源.Android2.2之前,没 ...
- Linux学习15-CentOS安装mysql5.6环境
前言 在linux上安装mysql5.6版本,并远程连接mysql数据库操作 安装mysql mysql的安装可以用yum安装更方便 [root@yoyo ~]# cd /usr/local/ [ro ...
- Unity3D 中鼠标按下时OnMouseDown()、Input.GetMouseButtonDown()和EventType.MouseDown的响应验证
初学unity3D,对于其中的事件响应不是很清楚,于是写了下面的代码来验证: 1.新建.cs文件,名为testMouse.cs: using UnityEngine; using System.Col ...
- 每天一个linux命令:df 命令
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- Build Web Apps in Node and Express视频下载
上传到百度云了,点击这里下载>> 作者使用的是Mac系统,不过Windows也差不多,主要理解express一些基本配置和使用,讲的比较基础,希望对node.js.express有兴 ...
- Java_并发线程_Semaphore、CountDownLatch、CyclicBarrier、Exchanger
1.Semaphore 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们可以正确.合理的使用公共资源. Semaphore当前在多线程 ...
- LINUX CentOS7安装字体库
LINUX CentOS7安装字体库 2017年12月26日 17:06:07 q260996583 阅读数:4866更多 个人分类: linux JAVA画图时常用到Font 类对象 这样的对象 ...
- JUnit - 测试框架
什么是 Junit 测试框架? JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量.JUnit 测试框架能够轻松完成以下任意两种结合: Ecli ...