【程序22】 题目:分别利用递归法和循环法求7的阶乘。 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加,以count代表多少个数相加)。 程序提供的值为数字a和一共count个数字相加,假设结果不会超过int整型的范围。 1.程序分析:关键是计算出每一项的值。 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。 程序分析:对n进行分解质因数,按下述步骤完成: (1)变量k从2开始循环到n,每层循环中,出现的第一个可以整除n的k,一定是n的最小的质因数,打印k。 (2)然后使用递归,将n/k的结果作为新的n,传入下一层递归。 (3)进入递归后,回到第一步。 本题需要注意乘号的打印个数应该是质因数少一个。 如果想要优化,其实在doWork的循环里面,没有必要从2到number所有数都尝试,因为如果2到number/2都无法整除,直接就说明了number是一个质数。而且,其实只需要尝试从2到number/2中的质数能否整除number,但生成质数表需要额外的代码,所以就不做复杂化了。本题主要是理解让循环在适当时候终结,以及递归的有效运用。 【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 假如提供的这四个数字是2、4、7、9,答案要如何修改?假如四个数字中有可能会有重复,程序应该如何修改? 上面的方法,写法虽然简单,但是解答的只是一种特殊情况,更加普遍的题目是任意的四个数字,需要考虑重复的数字,需要考虑0不能再首位,解法就更加复杂。比较常见的解法,此处需要用到HashMap,学完Hash之后再重做本题。 答案
为了方便解答任意四个数的情况,假如提供一个int数列,包括四个int即为四个数字,打印出所有不重复的三位数。
首先判断一下数列的length是否为4,否则本题将无法进行。同时,判断每个int是否是一位整数,否则也无法进行。在判断完题目提供的数据有效的情况下,用如下逻辑解答: 【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 假如题目改为,一个int型整数,未给定是几位数,判断是否是回文数字,代码应该如何修改?(为了方便解答,建议使用ArrayList,这里将不给出完整解答,请自行完成) Hint:从低到高把每一位数都取出来,存入ArrayList,然后比较第i个和倒数第i个是否相同。 Hint2:思考如何把一个数的最低位数字取出来。答案如下: 去除当前的最低位之后,存入ArrayList,那么如何去除次低位?
(将现在number除以10,再重复上述代码。一直循环到number除以10的结果为0,说明所有数字都被提取出来了)
0 Comments
Leave a Reply. |
更多有趣的文章档案库
November 2018
分类 |