一 /反推计算
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半,零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断/
int day,x1, x2;
day=9 ;
x2 =1;
while(day>0) {x1=(x2+1)*2; x2=x1; day--;}
System.out.println(x2);
二 /分解质因数
将一个正整数分解质因数。例如:输入90,打印出90=2335。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。*/
System.out.println("请输入一个正整数");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
System.out.print(n+"=");
for(int k=2; k<=n;k++) {
while(n!=k) {
if (n%k==0) {
System.out.print(k+"*");
n=n/k;}
else {break;}
}
}
System.out.print(n);
三 反指数计算
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?
第10次反弹多高?*/
float total=100; //总路程。
float startHeight=100; //每一次下落后弹起的高度
//计算在第十次落地时已经走过的路程。(第十次已经落地但是并没有走第十次的路程)
for(int i=1;i<=9;i++){
startHeight=startHeight/2; //计算此次弹起单程高度
total=startHeight*2+total; //将此次弹起并落地的高度加到总路程中。
}
System.out.println("totalmeters:"+total);
System.out.println("第十次高度:"+startHeight/2);
四 指定范围的完数
一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程找出1000以内的所有完数。*/
for(int i=2;i<=1000;i++)
{
int sum = 0; for(int j=1;j<i;j++) {if(i%j==0) { sum+=j; } }
if(sum==i)
{ System.out.print(i+ " ");}
}
五 组合
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 。不满足条件的排列*/
int x=0, y=0, z=0, count=0;
for(x=1;x<=4;x++) {
for(y=1;y<=4;y++) {
if(y==x) {continue;}
for(z=1;z<=4;z++) {if(y!=z&&z!=x) {System.out.println("组合的数分别别是"+x+y+z); count++;} }
}
}
System.out.println("总共可以组合的数有"+count+"个");