二、笨阶乘(Weekly Contest 127)

题目描述:
在这里插入图片描述
思路:
一开始将初始的那个计算出来,然后我们计算需要减去的和,然后我们加上所有的和,
然后进行总的计算即可

class Solution {
    public int clumsy(int N) {
         if(N == 1){
	    	   return 1;
	       }
	       if(N == 2 ){
	    	   return 2;
	       }
	       if(N == 3){
               return 6;
           }
	       int sum = 0;
	       int tem = N + 1;
	       while (tem - 4 > 0) {
			sum += tem-4;
			System.out.println("所有的加法" + (tem - 4));
			tem -= 4;
		}
	       int chengfa = N * (N - 1) / (N - 2);
	       System.out.println("第一个乘法" + chengfa);
	       sum += chengfa;
	      
	       int jianfa = 0;
	       int chushi = N - 4;
	       while (chushi - 3 >= 0) {
			jianfa += chushi*(chushi - 1)/(chushi - 2);
			chushi -= 4;
		}
	       if(chushi == 1){
	    	   jianfa += 1;
	       }else if(chushi == 2) {
			jianfa+=2;
           }
	       
	       
	       
	       return sum - jianfa;
    }
}

这个使用动态规划的算法可以好好看看,比较有新意

class Solution {
public:
    int dp[10010];
    int get3(int n){
        if(n==1) return 1;
        if(n==2) return 2;
        return n*(n-1)/(n-2);
    }
    int getdp(int n){
        if(dp[n]!=0) return dp[n];
        dp[n] = n*(n-1)/(n-2)+n-3+getdp(n-4) - 2*get3(n-4);
        return dp[n];
    }
    int clumsy(int N) {
        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 6;
        dp[4] = 7;
        return getdp(N);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值