关于#c++#的问题,如何解决?(危险的组合)

题目描述
有一些装有铀(用U表示)和铅(用L表示)的盒子,数量均足够多。要求把N个盒子放成一行,但至少有3个U放在一起,有多少种方法?

输入格式
第一行包含一个整数N(3<=N<=30)。

输出格式
输出一个整数表示方法数。

输入样例
4

输出样例
3


#include<bits/stdc++.h>
using namespace std;
int f(int n){
    if(n<3){
        return 0;
    }
    else if(n==3){
        return 1;
    }
    else if(n==4){
        return 3;
    }
    else{
        return 2*f(n-1)+pow(2,n-4)-f(n-4);
    }
}
int main(){
int n;
    cin>>n;
    cout<<f(n);
    return 0;
}

#include "stdio.h"
int Fun(int n){
int m=0; //表示有几个装铀的盒子放一起
int sum=0; //表示方法数目
for(m=3;m<=n;m++){
sum += (n-m+1);
}
return sum;
}
int main(){
int n;
printf("请输入N:");
scanf("%d",&n);
printf("%d个盒子,共有%d总方法",n,Fun(n));
return 0;
}