递归练习----练习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();
}

