递归练习----练习17(1)
https://ac.nowcoder.com/acm/contest/93963
1.
题目描述
某商场进行打折活动,若购物总金额达到指定值或以上且总件数为5件以上(含5件)时,最低价的一件商品将免费赠予,请编写函数double computePay(int n, double a[], double sv);计算商品总金额。n为商品件数(n>=1),数组a中列出了每件商品的单价格,sv为参与活动时应达到的最低金额,返回这批商品应付的总金额。
输入描述:
第一行为商品件数及参与活动应达到的最低金额(浮点型)。
第二行开始每行为一件商品的价格(浮点型)。
输出描述:
直接输出应支付的总金额,保留两位小数。
#include <iostream> #include <vector> using namespace std; int main() { //要求:n>5且总金额达到m。 float n,m; float sum=0; cin>>n>>m; vector<float>p(n,0); for(int i=0;i<n;i++) { cin>>p[i]; sum+=p[i]; } //如果n>5,sum>=m; if(n>=5&&sum>=m) { float min=p[0]; for(int i=1;i<n;i++) { if(p[i]<min) { min=p[i]; } } printf("%.2f",sum-min); } else { printf("%.2f",sum); } //否则直接输出sum }
2.
题目描述
请使用递归方法实现老和尚给小和尚讲n(1 ≤ n ≤ 100)遍故事。
输入描述:
一个整数n(1 ≤ n ≤ 100)
输出描述:
讲n遍故事,每遍占一行。
#include <iostream> using namespace std; void find(int star,int m,int &sum) { int i; for (i=star; i<=m; i++) { if(m%i==0 && i<=m/i) { sum++; find(i,m/i,sum); } if(i>m/i) break; } } int main() { int n,t,i; cin>>t; for(i=1;i<=t;i++) { int sum=1; cin>>n; find(2,n,sum); cout<<sum<<endl; } return 0; }
3.
题目描述
最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。给你两个数,请输出他们的最大公约数。
输入描述:
输入一行,包含两个正整数A,B
1 <= A,B <= 1e9
输出描述:
输出一行,包含一个正整数
#include <iostream> using namespace std; int gcd(int a,int b) { if(b==0) {return a;} else {return gcd(b,a%b);} } int main() { int a,b; cin>>a>>b; cout<<gcd(a,b)<<endl; }
4.
题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入描述:
一行内输入一串整数(小于等于1000个,范围1~100000),以 0 结束,以空格间隔
输出描述:
一行内倒着输出这一串整数,以空格间隔。
#include <iostream> #include <vector> using namespace std; void fish() { vector<int>p(10000); int i=0; while(cin>>p[i]) { if(p[i]==0) { goto jieshu; } i++; } jieshu: for(int j=i-1;j>=0;j--) { cout<<p[j]<<" "; } } int main() { fish(); }