




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
示例讲解1、 最大公约数 问题:求两个自然数的最大公约数。 这两个都是基础的数学问题,最大公约数指两个数字公共的约数中最大的,例如数字6的约数有1、2、3、6,数字9的约数有1、3、9,则数字6和数字9的公共约数有1和3,其中3是最大的公约数。 第一种思路:从1开始循环,每次把符合要求(即同时是两个数字的约数)的值都存储起来,那么最后一个存储起来的就是最大的约数。 则实现的代码如下: int n = 6; int m = 9; int result = 1; for(int i = 1;i m ?m : n; for(int i = result;i = 1;i-) if(n % i = 0) & (m % i = 0) result = i; break; /结束循环 System.out.println(result); 当然,解决这个问题,还有很多其它的方法,这里演示的这两种实现只是最自然的实现而已,采用类似的原理也可以求两个数字的最小公倍数的结构。2、 百元百鸡问题 问题描述:每只母鸡3元,每只公鸡4元,每只小鸡0.5元,如果花100元钱买100只鸡,请问有哪些可能?说明:每种鸡的数量都可以为零。 其实这个问题是数学上的组合问题,只需要把所有的情况列举出来,然后来判断是否符合要求即可。这样的重复列举的问题,在程序上可以使用循环进行解决。 第一种思路:当母鸡的数量为0时,公鸡的数量从0-100,当公鸡的数量每变化一次,小鸡的数量就从0变化到100,使用如下数值组合来描述这个思路: 母鸡数量公鸡数量小鸡数量 0 0从0变化到100 0 1从0变化到100 0 2从0变化到100 1 0从0变化到100 1 1从0变化到100 100 100 100 上面列举出了所有公鸡、母鸡和小鸡的数量都是0-100时的所有组合,总计是101的三次方种,这样的穷举结构直接存在嵌套,在程序实际实现时,通过循环之间的嵌套就可以实现,则实现的代码如下: for(int i = 0;i = 100;i+) /母鸡数量 for(int j = 0;j = 100;j+) /公鸡数量 for(int k = 0;k = 100;k+) /小鸡数量 /判断数量是否为100,以及金额是否为100 if(i +j + k = 100) & (i * 3 + j * 4 + k * 0.5 = 100) System.out.println(“母鸡数量:” + i + “ 公鸡数量:” + j + “ 小鸡数量” + k); 按照for语句的执行流程,循环变量变化1,则内部的循环执行一次,而在循环嵌套时,循环体又是一个新的循环,则该循环执行完成的一组循环。这里通过循环的嵌套实现了所有数值的穷举。在循环的内部,只需要按照题目要求判断一下数量和金额是否符合要求即可。 但是这样的代码效率比较差,可以通过简单的优化来提高程序的执行效率。 第二种思路:由于母鸡每只的金额是3元,所以100元最多购买的母鸡数量是100/3=33只,同理100元最多购买的公鸡数量是25只,而按照100元100只的要求,小鸡的数量应该为100减去公鸡和母鸡的数量,这样代码就可以简化为如下的结构: for(int i = 0;i = 33;i+) /母鸡数量 for(int j = 0;j 0) /有汽水可以喝 num-; /喝掉一瓶 emptyNum+; /空瓶子数量增加1 drinkNum+; /喝掉的汽水数量增加1 if(emptyNum = 3) /有3个空瓶子,则去换 num+; /汽水数量增加1 emptyNum = 0; /空瓶子数量清零 System.out.println(“总共喝掉瓶数:” + drinkNum); System.out.println(“剩余空瓶子数:” + emptyNum); 执行该程序,输出结果如下:总共喝掉瓶数:1499剩余空瓶子数:2在该代码中,每次循环喝掉一瓶汽水,则汽水数量减少1,空瓶子数增加1,喝掉的总汽水瓶数增加1,每次判断空瓶子的数量是否达到3,如果达到3则换1瓶汽水,同时空瓶子的数量变为零。这种思路比较直观,但是循环的次数比较多,所以就有了下面的逻辑实现。 第二种思路:一次把所有的汽水喝完,获得所有的空瓶子,再全部换成汽水,然后再一次全部喝完,再获得所有的空瓶子,依次类推,直到没有汽水可喝为止。 则实现的代码如下: int num = 1000; /汽水数量 int drinkNum = 0; /喝掉的汽水数量 int emptyNum = 0; /空瓶子的数量 while(num 0) /有汽水可以喝 drinkNum += num; /喝掉所有的汽水 emptyNum += num; /空瓶子数量等于上次剩余的加上这次喝掉的数量 num = emptyNum / 3; /兑换的汽水数量 emptyNum -= num * 3; /本次兑换剩余的空瓶子数量 System.out.println(“总共喝掉瓶数:” + drinkNum); System.out.println(“剩余空瓶子数:” + emptyNum); 在该代码中,每次喝掉所有的汽水,也就是num瓶,则喝掉的总瓶数每次增加num,因为每次都可能剩余空瓶子(不足3个的),则总的空瓶子数量是上次空瓶子数量加上本次喝掉的num瓶。接着是对话汽水,则每次可以兑换的汽水数量是空瓶子的数量的1/3,注意这里是整数除法,而本次兑换剩余的空瓶子数量是原来的空瓶子数量减去兑换得到汽水数量的3倍,这就是一次循环所完成的功能,依次类推即可解决该问题。4、水仙花数 问题:水仙花数指三位数中,每个数字的立方和和自身相等的数字,例如370,3 3 3 + 7 7 7 + 0 0 0 =370,请输出所有的水仙花数。 该问题中体现了一个基本的算法数字拆分,需要把一个数中每位的数字拆分出来,然后才可以实现该逻辑。 实现思路:循环所有的三位数,拆分出三位数字的个位、十位和百位数字,判断3个数字的立方和是否等于自身。 则实现的代码如下所示: for(int i = 100;i 1000;i+) /循环所有三位数 int a = i % 10; /个位数字 int b = (i / 10) % 10; /十位数字 int c = i / 100; /百位数字 /判断立方和等于自身 if(a * a * a + b * b * b + c * c * c = i) System.out.println(i); 在该代码中,拆分个位数字使用i和10取余即可,拆分十位数字时首先用i除以十,去掉个位数字,并使原来的十位数字变成个位,然后和10取余即可,因为i是一个三位数,所以i除以100即可得百位数字,因为这里都是整数除法,不存在小数的问题。然后只需要判断立方和是否等于自身即可。 注意:因为i是循环变量,这里不能改变i的值,不然可能造成死循环。5 、99乘法表 问题:在控制台打印数学上的99乘法表 该类问题是发现数字的规律,然后将数值的规律用程序描述出来。实际实现时,可能需要耐心的进行调试。在这里,需要实现数字的多行输出,前面使用的System.out.println是输出内容并换行,后续再输出的内容就再下一行显示,如果需要在输出时不换行,则可以使用System.out.print进行输出。 99乘法表的规则是总计9行,每行单独输出,第一行有1个数字,第二行有2个数字,依次类推,数字的值为行号和列号的乘积。 实现思路:使用一个循环控制打印9行,在该循环的循环体中输出该行的内容,一行中输出的数字个数等于行号,数字的值等于行号和列号的成绩。 实现代码如下: for(int row = 1;row = 9;row+) /循环行 for(int col = 1;col = row;col+) /循环列 System.out.print(row * col); /输出数值 System.out.print( ); /输出数字之间的间隔空格 System.out.println(); /一行输出结束,换行 该程序的输出为: 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 在该输出中,数字之间的对齐有些问题,第四行和第五行的对齐就很明显。那么如果在输出时想让数字对齐,那么就要首先思考数字为什么不能对齐?则问题直观的出现在有些数字是一位数有些是两位数,发现了原因就可以着手解决了,如果想实现数字的左对齐,则在一位数字的后续多输出一个空格,如果想实现数字的右对齐,则只需要在一位数字的前面输出一个空格即可。 以下代码实现了数字的右对齐: for(int row = 1;row = 9;row+) /循环行 for(int col = 1;col = row;col+) /循环列 if(row * col 10) /一位数 System.out.print( ); System.out.print(row * col); /输出数值 System.out.print( ); /输出数字之间的间隔空格 System.out.println(); /一行输出结束,换行 所以在实际书写代码时,代码的位置对于程序逻辑的影响很大,在编写代码时,需要认真考虑代码书写的位置。6 、打印图形 问题:在控制台中打印如下格式的图形 * * * * * 由于受到控制台输出的限制,只能按照行的上下,依次进行输出,所以解决打印图形的问题时,只能按照从上到下依次输出每行的内容,关键是仔细观察,发现图形的规律。 第一种思路:外部循环循环5次打印5行,每行的内容分为两部分:空格和星号,每行空格的数量是5减去行号个,每行星号的数量是行号的2倍减1个,在外部循环内部先打印空格,再打印星号,每个都只打印1个,使用数量控制对应的打印次数,打印完星号以后换行。 则实现的代码如下: for(int row = 1;row = 5;row+) /循环行 /打印空格 for(int c1 = 0;c1 5 - row;c1+) System.out.print( ); /打印星号 for(int c2 = 0;c2 2 * row - 1;c2+) System.out.print(*); /换行 System.out.println(); 该代码中row的循环用于控制打印的行数,row变量的值代表行号,内部的循环体分为三部分:打印空格,打印星号和换行,打印的数量参看图形的规律部分。 第二种思路:外部循环循环5次打印5行,内部每行打印的总字符数量是4加行号个,其中前5-行号个字符是空格,后续的字符是星号,所有字符打印完成以后换行。 则实现的代码如下: for(int row = 1;row = 5;row+) /循环行 /循环总的字符数 for(int col = 0; col 4 + row;col+) if(col 5 - row) /打印空格 System.out.print( ); else /打印星号 System.out.print(*); /换行 System.out.println(); 该代码的总体思路和第一种思路一样,都是按行打印,只是在考虑问题时首先考虑字符总的数量,把这个数量作为循环次数,内部控制那些该输出字符那些该输出星号即可。7、 质数判断问题:判断一个自然数是否是质数。 质数指只能被1和自身整除自然数,也称素数,最小的质数是2.对于自然数来说,任何一个数字都可以被1和自身整除。 实现思路:利用数学上的反证法进行判断。则问题转换为只需要判断不能被1和自身以外的任何一个数字整除即可。则假设判断的数字是n的话,则这些数字的区间是2,n-1和大于n的所有数字。在数学上n不可能被大于n的数字整除,所以程序只需要判断2,n-1之间的数字即可,如果被该区间的任何一个数字整除了,则说明不是质数。 则实现的代码如下: int n = 23; boolean b = true; /存储是否是质数,假设是质数 for(int i = 2;i n;i+) /如果整除,则不是质数 if(n % i = 0) b = false; break; /后续比较没有意义,结束循环 /输出是否是质数 if(b) System.out.println(是质数); else System.out.println(不是质数); 该代码是最容易思考出来的一种实现,其实在数学上只需要判断n是否可以被2到n的二次方根之间的数字即可。则实现的代码变为如下: int n = 23; boolean b = true; /存储是否是质数,假设是质数 for(int i = 2;i 0;i-) System.out.println(第+day+天,有桃子+total+颗); total = (total + 1) * 2; day-; 方法二:javaimport java.util.Scanner;/*题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个* 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。* 以后每天早上都吃了前一天剩下 的一半零一个。* 到第10天早上想再吃时,见只剩下一个桃子了。求第n天共还有多少桃子。1.程序分析:采取逆向思维的方法,从后往前推断。 */public class Peach2 public static void main(Stringargs) Scanner in = new Sca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 同上一堂课教学活动方案
- 试验检测安全培训
- 清醒气管插管课件
- 名校培优活动方案
- 听天由命活动方案
- 新风机培训课件
- 消防绘画培训课件
- 单身活动线下活动方案
- 听声定位活动方案
- 医药公司探店活动方案
- 2025汾西矿业井下操作技能人员招聘300人(山西)笔试参考题库附带答案详解析集合
- 2025餐厅管理与服务合同
- 2025年高考全国二卷英语高考真题
- 2025年全国“银行业金融消费者权益保护”应知应会知识考试题与答案
- 安全输液护理管理
- 2025化工安全考试题库及答案
- T/CECS 10011-2022聚乙烯共混聚氯乙烯高性能双壁波纹管材
- 2025届江苏省宿迁市名校八下数学期末检测试题含解析
- 中南财经政法大学《编译原理》2023-2024学年第二学期期末试卷
- 高考报考志愿协议书
- 玉环金鑫塑胶有限公司年产350万口不粘锅生产线技改项目环境影响报告书
评论
0/150
提交评论