老板发奖金--niuke
老板一共需要给某个员工发奖金n元,可以选择一次发1元,也可以选择一次发2元,也可以选择一次发3元。请问老板给这位员工发放完n元奖金共有多少种不同的方法?
数据范围:1 <= n <= 10
import java.util.Scanner;
public class GiveMoney {
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
System.out.print ("输入要发的奖金:");
int number = scanner.nextInt ();
System.out.println ("您有" + f (number) + "种方法发完" + number + "元奖金!!");
}
/**
* 获取 发奖金可用的总方法 的方法
*
* @param number 要发的钱数
* @return 总方法数
*/
public static int f(Integer number) {
//设置递归出口
if(number==1) {
return 1;
}
//设置计数器,因为都会有全部还钱的情况
int count = 0;
/**
* 1:先发1块的情况下,剩下4块是不是就和发4块的方法一样了?
2:先发2块的情况下,剩下3块是不是就和发3块的方法一样了?
3:先发3块的情况下,剩下2块是不是就和发2块的方法一样了?
4:先发4块的情况下,剩下1块是不是就和发1块的方法一样了?
5:5块一次性发完,唯一方法
*/
//f(5) = f(4)+f(f3)+(f2)+(f1)+1
for(int i = number - 1 ;i >0 ;i--) {
count = f(i) + count;
}
return count + 1;
}
}
链接:https://www.nowcoder.com/questionTerminal/e1f0cf12993d49f498601d88a57b8e5e
来源:牛客网
老板一共需要给某个员工发奖金n元,可以选择一次发1元,也可以选择一次发2元,也可以选择一次发3元。请问老板给这位员工发放完n元奖金共有多少种不同的方法?
数据范围:1 <= n <= 10
示例1
输入
2
输出
2
说明
一共有2元奖金,有两种发放方法;第一中:分别每次发放1元,两次发放完,第二种一次全部发放完
示例2
输入
3
输出
4
说明
一共有3元奖金,有4种发放方法;第一种:分别每次发放1元,3次发放完,第二种先第一次发2元,第二次发1元; 第三种第一次发1元,第二次发2元; 第四种方法一次全部发放完
import java.util.*;
public class Solution {
/**
*
* @param num_money int整型 奖金的总数,单位为元
* @return int整型
*/
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int num_money = sc.nextInt();
System.out.println(CalulateMethodCount(num_money));
sc.close();
}
public static int CalulateMethodCount (int num_money) {
//动态规划
int[] dp = new int[num_money + 1];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (int i = 4; i <= num_money; ++i) {
// dp[4]=dp[3]+dp[2]+dp[1]
// dp[5]=dp[4]+dp[3]+dp[2]
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
}
return dp[num_money];
}
}