在java eye论坛上看到的,
大致意思是:
某人1次可以走1个,2个或3个台阶,写程序计算走N个台阶的各种走法。
试了一下,很简单。
package interest.chess;
import java.util.LinkedList;
import java.util.List;
/**
* 某人1次可以走1个,2个或3个台阶
* 写程序计算走N个台阶的各种走法。
*
* @time: Nov 4, 2010 5:23:18 PM
* @author suntao19830709@gmail.com
*/
public class Test {
public static void main(String[] args) {
int n = 5;
List<String> stepHis = new LinkedList<String>();
System.out.println("总共方法有" + go(n, stepHis) + "种。");
}
/**
* 计算要走的步数,并保存在stepHis种
* @param steps 还有多少步要走
* @param number 走法的数目
* @param stepHis 保存该种走法的列表
* @return 总共走法数
*/
public static int go(int steps, List<String> stepHis){
int thisNumber = 0;
//剩余步数为0,那么可以把之前记录的his都打出来了
if(steps == 0){
if(stepHis.size()>0){
thisNumber++;
}
printHis(stepHis);
}else{
//如果步数超过1,2或3,那么减掉该步骤,继续算剩余步数的走法
for(int i = 1; i <=3; i++ ){
if((steps - i) >= 0){
List<String> thisStepHis = (List<String>)((LinkedList<String>)stepHis).clone();
thisStepHis.add(i + ",");
thisNumber += go(steps-i, thisStepHis);
}
}
}
return thisNumber;
}
/**
* 打印步数
* @param stepHis
*/
public static void printHis(List<String> stepHis){
for(String str : stepHis){
System.out.print(str);
}
System.out.println();
}
}
分享到:
相关推荐
某人上楼梯,他一步可以迈一个台阶,两个台阶或三个台阶,共有n个台阶,编程输出他所有可能上法。如:有4个台阶,输出应是: 1 1 1 1 1 1 2 1 2 1 1 3 2 1 1 2 2 3 1 算法设计: 给定台阶的个数n,输出所有可能的上法...
台阶 计算 利用递归实现如何实现楼梯的走法~
//例如,楼梯有3级台阶,小明每一步可以爬1级、2级或3级,则小明一共有4种爬法。 //如果n的取值从32~36,m的取值从2~3,请写程序输出每种情况下小明有多少种爬楼梯的方法。 //输入格式:共2行数据,内容如下: /...
某人上楼梯,他一步可以迈一个台阶,两个台阶或三个台阶,共有n个台阶,编程输出他所有可能上法。由文件input.txt 提供输入数据。文件的第1 行是台阶个数n(n≤10)。将计算出的所有可能上法分行输出到文件output....
在n x n棋盘(有n x n个格点的棋盘)的某个格点上有一个中国象棋马,马走日字。求一条周游棋盘的路径,使得马能够从起始位置起沿着该路径每个格点恰好走一次最后回到出发位置。 用回溯法解决该问题。输入一个正整数n...
例子:某人在纸上写了一个四位整数3a45(a代表一个数字)。已知这个四位整数被3除后的值是1115,请问这个四位整数是什么? 算法描述: 用a的所有可能取值(0~9)分别形成10个四位整数3045、3145、…、3945依次...
2. **模拟法**:通过使用数组或列表来存储人,从0到N-1依次代表每个人,通过循环进行报数,每次数到M就删除该位置的人并更新计数器。这种方法简单易行,但效率也不高,因为频繁的删除操作会增加时间复杂度。 3. **...
其中ai,bi(i=1,2…n) 分别表示某人的名字和对应的电话号码要求设计一个算法,当给定任何一个人的名字时,该算法能够打印出此人的电话号码,如果该电话簿中根本就没有这个人,则该算法也能够报告没有这个人的标志。
3. **计算属性与侦听器**:可能需要使用计算属性(`computed`)来处理用户输入的过滤和格式化,同时使用侦听器(`watch`)来监控输入变化,以便在输入@后触发用户查找功能。 4. **状态管理**:在多组件环境中,数据...
本任务的主要目标是通过Java编程语言实现一个能够根据个人月收入自动计算所需缴纳个人所得税的应用程序。该程序将依据中国现行个人所得税法的基本税率表进行计算,并且通过不同的条件判断来确定纳税人的应纳税额。 ...
为方便管理个人通讯记录,编写一个简单的通讯录管理程序。系统记录必须有姓名、地址(省市(县)、街道)、电话号码、移动电话,电子邮件。 3.程序功能基本管理功能有: (1) 添加:增加一个人的记录到通讯记录中...
例如,当某人被感染后,经过一段时间可能会康复或进入另一种状态。程序的主要逻辑是通过循环迭代每个人的状态并进行相应的操作,如移动、状态变化以及影响周围的人等。 具体来说,在每一轮迭代中,程序会检查每个人...
(3)存储:即将通讯录信息存储到一个文件中。 (4)装入:即将文件的信息读入程序中。 (5)查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。 (6)修改:可修改一个人的除...
【标题】:“一个表白程序(他人写的)” 这个标题揭示了我们要讨论的内容是一个特别的程序,主要用于情感表达,特别是向某人表白。程序是他人编写的,可能意味着它具有独特的设计和功能,可能是通过编程语言如C++,...
2. 第二次、第三次都击中的概率:这是一个条件概率问题,需要考虑前一次和后一次的结果,即 \( P(\text{第2次和第3次都击中} | \text{第一次未击中}) \times P(\text{第一次未击中}) \)。 3. 至少击中2次的概率:...
(1)输入今天的日期(年,月,日)和你的出生日期(年,月,日),计算你在这个世界已经生存了多少天。取值范围:年:1900 – 2100,月:1 – 12,日:1 – 31 (2)输入期望的年龄,计算还将在这个世界...
第四个题目是 N 个人围成一圈顺序编号,从 1 号开始按 1、2、3 顺序报数,报 3 者退出圈外,其余的人再从 1、2、3 开始报数,报 3 的人再退出圈外,依次类推。这个题目考察了对环行链表的理解和编程能力。 下一个...
这里我们讨论的“C++输入三个点求二次函数解析式”小程序是用于通过用户输入的三个点坐标来确定一个标准形式的二次函数y = ax^2 + bx + c。该程序的基本思想是利用三个点的坐标构建一个线性方程组,然后通过求解这个...
(1) 添加:增加一个人的记录到通讯记录中。 (2) 修改:在通讯录中修改一个人的记录。 (3) 保存:将通讯录信息保存在一个文件中。 (4) 查询:可以根据姓名查找某人的相关信息,若找到显示其信息。 (5) ...