递归小结

思路 :

用递归的方法,判断到an的时候有两种情况

(1){an}是k个集合中的一个,那么这时候的情况等于s(n-1,k-1)

(2){an}不是k个集合中的一个,也就是说an和别的物品一起放在一个盒子,此时等于有k个盒子n-1个物品的情况,再把an放到k个盒子里的一个:k*s(n-1,k)

考虑边界情况:

(1)若k==0,return 0

(2)若n<k,return 0(无法满足没有空盒子)

(3)若n==k,return 1

(4)若k==1,return 1

代码入下:

扫描二维码关注公众号,回复: 4703092 查看本文章
#include<iostream>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1

const int INF=0x3f3f3f3f,mod=12345;
const int N=10005,N1=105;

ll dfs(int n,int k){
    if(n<k||k==0)return 0;
    if(n==k||k==1)return 1;
    return dfs(n-1,k-1)+k*dfs(n-1,k);
}

int main(){
    int n,k;
    while(scanf("%d%d",&n,&k)!=EOF){
        printf("%lld\n",dfs(n,k));
    }
}

 思路:

这个题刚开始看的时候并没看出来哪递归了QwQ,好菜

* + 11.0 12.0 + 24.0 35.0

也就是 (11.0+12.0) * (24.0+35.0)

可以看出,每到一个符号,他就执行运算,一层一层向下递归

atof()

atof的运用范围非常少,但是有一些特定的题目需要它,它可以将字串转换成浮点型数,非常的方便,它需要运用#include<algorithm>头文件。atof()会扫描参数字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时才结束转换,并将结果返回。参数字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
用法:

#include<iostream>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<sstream>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1

const int INF=0x3f3f3f3f,mod=12345;
const int N=1005,N1=105;
char a[100],b[100];

int main(){
    scanf("%s%s",a,b);
    double a1=atof(a),b1=atof(b);
    printf("%f %f\n",a1,b1);
}

 

#include<iostream>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<sstream>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1

const int INF=0x3f3f3f3f,mod=12345;
const int N=1005,N1=105;
char a[100];
double solve(){
    scanf("%s",a);
    int len=strlen(a);
    if(a[0]=='+'||a[0]=='-'||a[0]=='*'||a[0]=='/'){
        if(a[0]=='+')return solve()+solve();
        if(a[0]=='-')return solve()-solve();
        if(a[0]=='*')return solve()*solve();
        if(a[0]=='/')return solve()/solve();
    }
    else {
        return atof(a);
    }
}

int main(){
    printf("%f\n",solve());
}

猜你喜欢

转载自blog.csdn.net/m0_37579232/article/details/85044355