




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java经典逻辑编程50题【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1) 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21. (斐波那契数列)2) 参考代码import java.util.Scanner;public class RabbitNum public static void main(String args) Scanner in = new Scanner(System.in);System.out.println(你想知道前几个月的兔子的数量);int month = in.nextInt();int mon = new intmonth;if(month 3)System.out.println(第 + month + 个月有 1 对兔子,共 2 只);elsefor(int i = 2; i month; i+)mon0 = mon1 = 1;moni = moni - 1 + moni - 2;System.out.printf(第 %d 个月有 %d 对兔子,共 %d 只兔子n, i + 1, moni, 2 * moni);【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1 ) 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 (java.lang.Math.sqrt(double a)返回正确舍入的一个double值的正平方根)2) 参考代码public class Prime public static void main(String args) System.out.print(101-200中的素数有:);for(int i = 101; i = 200; i+)if(isPrime(i)System.out.print( + i);/isPrime方法用来判断一个数是否是素数private static boolean isPrime(int i) for(int j = 2; j = Math.sqrt(i); j+)if(i % j = 0)return false;return true;【程序3】 题目:打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方5的三次方3的三次方。1 ) 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 2) 参考代码public class NarcissisticNum public static void main(String args) System.out.print(水仙花数有:);for(int num = 100; num 1000; num+)if(isNarcissisticNum(num)System.out.println( + num);/一个判断正整数是否为水仙花数的方法private static boolean isNarcissisticNum(int num) / TODO Auto-generated method stubint a = num / 100; /分离出百位 aint b = (num / 10) % 10; /分离出十位 bint c = num % 10; /分离出个位 cint sum = a * a * a + b * b * b + c * c * c;if(sum = num)return true;elsereturn false;【程序4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。参考代码:import java.util.Scanner;public class PrimeFactorOfInteger public static void main(String args) Scanner input = new Scanner(System.in);System.out.println(请输入一个大于 3 的正整数);int num = input.nextInt();System.out.print(num + 的素因数:);factor(num);private static void factor(int num) for(int i = 2; i = Math.sqrt(num); i+)if(num % i = 0)System.out.print(i + * );if(isPrime(num / i)System.out.println(num / i);elsefactor(num / i);break;private static boolean isPrime(int i) for(int j = 2; j =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。1. 程序分析:(ab)?a:b这是条件运算符的基本例子。参考代码import java.util.Scanner;public class ConditionalOperator public static void main(String args) Scanner in = new Scanner(System.in);System.out.println(请输入你的分数);int score = in.nextInt();if(score = 90)System.out.println(A 恭喜);else if(score = 60)System.out.println(B 不错);elseSystem.out.println(C 加油);【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1.程序分析:利用辗除法。参考代码import java.util.Scanner;public class Example6 public static void main(String args) Scanner in = new Scanner(System.in);System.out.println(请输入第一个数);int a = in.nextInt();System.out.println(请输入第二个数);int b = in.nextInt();System.out.println(这两个数的最大公约数是 + MaxCommonDivisor(a, b);System.out.println(这两个数的最小公倍数是 + MinCommonMultiple(a, b);private static int MaxCommonDivisor(int a, int b) if(a b)int temp = a;a = b;b = temp;while(a % b != 0)int temp = a % b;a = b;b = temp;return b;private static int MinCommonMultiple(int a, int b) return a * b / MaxCommonDivisor(a, b);【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1. 程序分析:利用while语句,条件为输入的字符不为n.参考代码import java.util.Scanner;public class Statistic public static void main(String args)Scanner in = new Scanner(System.in);System.out.println(Input one sentance.);String s = in.nextLine();int letter = 0, symbol = 0, space = 0, number = 0;char strArray = s.toCharArray();for (int i = 0; i strArray.length; i+)char c = strArrayi;if(a = c & c = z) | (A = c & c = Z)letter+;else if(48 = c & c = 57) /注意!数字0-9的ASCII码是48-57number+;else if(c = )space+;elsesymbol+;System.out.println(This sentance have + letter + letters, );System.out.println(have + number + numbers, );System.out.println(have + space + spaces, + and + symbol + symbols.);【程序8】题目:求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。1.程序分析:关键是计算出每一项的值。参考代码import java.util.Scanner;public class Example8 public static void main(String args) Scanner input = new Scanner(System.in);System.out.println(请输入相加的基数);int n = input.nextInt();System.out.println(请输入要相加的个数);int i = input.nextInt();long total = 0L;long temp = n;for(int j = 0; j i; j+)total += temp;temp = temp * 10 + n;System.out.println(和为 + total);【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=123.编程找出1000以内的所有完数。参考代码public class WholeNumber public static void main(String args) System.out.println(1000以内的完数有:);for(int num = 1; num 1000; num+)isWholeNumber(num);private static void isWholeNumber(int num) int sum = 0;for(int i = 1; i = num / 2; i+)if(num % i = 0)sum += i;if(sum = num)System.out.println(num);【程序10】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?1:注意弹球一上一下的距离2:参考代码import java.util.Scanner;public class Pinball public static void main(String args)Scanner in = new Scanner(System.in);System.out.println(请输入原始高度。);double s = in.nextDouble();System.out.println(要求第几次落地后的距离。);int n = in.nextInt();double total = s;System.out.printf(第%d次落地后共走的距离是: , n);if(n = 1)System.out.println(total);System.out.printf(第%d次反弹的距离是%f。, n, s / 2);elsefor(int i = 1; i n; i+)s = s / 2;total += 2 * s; /一上一下共两倍的弹跳距离System.out.print(total);System.out.println();System.out.printf(第%d次反弹的距离是%f。, n, s / 2);【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1. 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2. 参考代码public class Three_digitNum public static void main(String args) int i, j, k; /分别代表个、十、百位int num; /用来输出符合要求的三位数int count = 0; /用来统计符合要求的三位数有多少个System.out.println(符合要求的三位数有:);for(i = 1; i = 4; i+)for(j = 1; j = 4; j+)if(i != j) /提前把有重复的部分情况过滤掉,减少运行次数,优化性能for(k = 1; k = 4; k+)if(i != k & j != k)num = i + j * 10 + k * 100;System.out.println(num);count+;System.out.println(符合要求的三位数共有 + count + 个);【程序12】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1. 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。【程序13】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。参考代码public class FundNum public static void main(String args)long i, j, k;for(i = 1; i 100000; i +)for(j = 0; j 1000; j+)if(j * j = i + 100)for(k = j; k 2)&isLeap(year)System.out.printf(这天是这年第%d天。, sum + day + 1);elseSystem.out.printf(这天是这年第%d天。, sum + day);private static boolean isLeap(int year)if(year % 100 != 0)&(year % 4 = 0) | (year % 400 = 0)return true;elsereturn false;【程序15】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。2. 参考代码import java.util.Scanner;public class MinOfThree public static void main(String args) Scanner in = new Scanner(System.in);System.out.println(请输入三个整数);System.out.println(请输入第1个整数);int a = in.nextInt();System.out.println(请输入第2个整数);int b = in.nextInt();System.out.println(请输入第3个整数);int c = in.nextInt();System.out.print(从小到大的顺序为:);if(a b)if(b c)System.out.printf(%d%d%d, a, b, c);elseif(a c)System.out.printf(%d%d%d, a, c, b);elseSystem.out.printf(%d%d%d, c, a, b);elseif(c b)System.out.printf(%d%d%d, c, b, a);elseif(c a)System.out.printf(%d%d%d, b, c, a);elseSystem.out.printf(%d%d%d, b, a, c);【程序16】题目:输出9*9口诀。1. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2. 参考代码public class JiujiuBiao public static void main(String args)for (int i = 1; i 10; i+)for (int j = 1; j = i; j+)int total = 0;total = i * j;System.out.printf(%d * %d = %-5d, j, i, total);System.out.println();【程序17】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。1. 程序分析:采取逆向思维的方法,从后往前推断。2. 参考代码public class EatPeach public static void main(String args) int total = 1;/day = 1的时候,算出来的total其实是第9天有的桃子/day = 9的时候,算出来的total就是第1天的桃子for(int day = 1; day 10; day+)total = 2 * (total + 1);System.out.println(一开始共有 + total + 桃子);【程序18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。1. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。2. 参考代码public class MatchCP public static void main(String args) char i, j, k; /i,j,k分别是a,b,c的对手for(i = X; i = Z; i+)for(j = X; j = Z; j+)if(i != j)for(k = X; k Z; k+)if(i != k & j != k)if(i != X & k != X & k != Z)System.out.printf(a - %cnb - %cnc - %c, i, j, k);【程序19】题目:打印出如下图案(菱形)代码略【程序20】题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。1. 程序分析:请抓住分子与分母的变化规律。2. 参考代码public class FractionSum public static void main(String args) float i = 2.0f, j = 1.0f; /i为分子,j为分母float num = 2.0f; /num是分数,sum是分数的和float sum = 2.0f;for(int m = 1; m 20; m+) /m = 1时,num已经是第2个加数了,所以m 20i = i + j;j = i - j; /变化前的 i 赋值给 jnum = i / j;sum += num;System.out.println(前20个分数的和为 + sum);【程序21】题目:求1+2!+3!+.+20!的和1. 程序分析:此程序只是把累加变成了累乘。2. 参考代码import java.util.Scanner;public class Recursion public static void main(String args) Scanner in = new Scanner(System.in);System.out.println(你想计算到哪个数的阶乘的和);int num = in.nextInt();long temp = 0L;long sum = 0L;for(int i = 1; i 1)return num * recursion(num - 1);return 1;【程序22】题目:利用递归方法求5!。1. 程序分析:递归公式:fn=fn_1*4!2. 参考代码:【程序23】题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?1. 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。2. 参考代码【程序24】题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。参考代码import java.util.Scanner;public class ReversedNum public static void main(String args) Scanner in = new Scanner(System.in);System.out.println(请输入一个不多于5位的整数);int num = in.nextInt();int n = 1;System.out.print(这个数的逆序为:);while(num / 10 0)n+;int tmp = num % 10;System.out.print(tmp);num /= 10;System.out.println(num);System.out.println(这个数共有 + n + 位数);【程序25】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。【程序26】题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。1. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。2. 参考代码import java.util.Scanner;public class WeekDay public static void main(String args) Scanner in = new Scanner(System.in);char firstletter, secondletter; /存放第一第二个字母System.out.println(请输入第一字母);String letter = in.next();firstletter = letter.charAt(0);switch(firstletter)case m:case M: System.out.println(是星期一);break;case w:case W:System.out.println(是星期三);break;case f:case F:System.out.println(是星期五);break;case t:case T:System.out.println(仅由该字母无法判断出星期几,请输入第二个字母);letter = in.next();secondletter = letter.charAt(0);if(secondletter = u | secondletter = U)System.out.println(是星期二);break;else if(secondletter = h | secondletter = H)System.out.println(是星期四);break;elseSystem.out.println(输入错误);case s:case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋改造工程方案报价(3篇)
- 堤防工程比选方案(3篇)
- 农业气象服务创新与智慧农业生态循环发展报告
- 任务群视域下初中语文学习主题的确立
- 安全教育月培训会课件
- 牧草饲料育种学课件
- 农业保鲜技术新突破-2025年鉴定报告:技术创新与产业融合
- 矿山会计面试题库及答案
- 科室人员面试题库及答案
- 康复医学招聘面试题库及答案
- 雾都孤儿读书笔记3000字(三篇)
- 气管镜镜下定位简介演示文稿
- GB/T 8572-2010复混肥料中总氮含量的测定蒸馏后滴定法
- 2023年湖南自考本科税收筹划复习资料
- 45G互操作及信令流程
- 友善主题班会课件
- 自动喷灌设计说明及安装大样
- 杭州市“教坛新秀”理论考试简答题汇总
- 人教版(2019)必修三 Unit 3 Diverse Cultures Listening and Talking课件
- 医养结合机构服务质量评价标准(二级医养结合机构)
- 三年级上册数学课件-4.2 两、三位数除以一位数的笔算丨苏教版 (共34张PPT)
评论
0/150
提交评论