思路 :
用递归的方法,判断到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
代码入下:
#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());
}