题目:
1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
一、题目分析
递归模型:经过n个村庄后剩余鸭子数为lastduck,则卖出的鸭子数为lastduck+2,经过这个村庄前的鸭子数为2*(lastduck+1)经过七个村庄时lastduck=2
二、算法构造
2 n=7
f=
2*(lastduck+1) 0<n<7
三、源代码
package digui;
public class duck {
public static void main(String args[]) {
f();
}
public static void f() {
int lastduck=2;//表示经过村庄后剩余鸭子的数量
int n=0;//经过的村子数量
int sumduck=0;//总的鸭子数量
for(n=7;n>0;n--) {
lastduck=(lastduck+1)*2;//经过村子时鸭子数=(经过村庄后剩余鸭子数+1)*2
System.out.println("经过第"+n+"个村庄时鸭子数为"+lastduck);
}
sumduck=lastduck;
System.out.println("鸭子的总数为:"+sumduck);
}
}
- 调试、测试及运行结果
运行结果
调试
测试
package yz;
import java.util.Scanner;
public class test {
public static void main(String args[]) {
f();
}
public static void f() {
int lastduck=2;//表示经过村庄后剩余鸭子的数量
System.out.println("请输入需要查询的村庄序号");
Scanner input = new Scanner(System.in);
int j = input.nextInt();
for (int i = 0; i < (8-j); i++) {
lastduck = (lastduck + 1) * 2;
}
System.out.println("经过第 " + j + "个村庄时,剩余鸭子的个数为" + lastduck);
}
}
测试结果
题目
题目:角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
- 题目分析
设count(n)表示关于自然数n的一个函数,当n=1时,count(1)=1。当n>1且n为偶数时,count(n)=count(n/2);当 n>1且n为奇数时,count(n)=count(3*n+1)。得到自然数1的运算次数为每次运算次数之和。
2、算法构造
1 n=1
Count(n)= count(n/2) n>1&&n%2==0
Count(3*n+1) n>1&&n%2!=0
3、源代码
package gj;
import java.util.Scanner;
public class gujiao {
static int i = 0;
public static void main(String[] args) {
System.out.println("请输入需要计算的数字");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int i = count(n);
System.out.println("STEP= " +i);
}
public static int count(int n) {
if (n == 1) {
System.out.println(n);
i++;
}
else if (n % 2 == 0) {
System.out.println(n );
count(n / 2);
i++;
}
else {
System.out.println(n);
count(n * 3 + 1);
i++;
}
return i;
}
}
4、测试调试及运行结果
运行结果
调试