天梯赛练习3

7-3 N个数求和 (20分)

思路:从第二个数开始,每输入一个就进行一次加法运算,求分母的最小公倍数,最后特殊判断输出即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct
{
    long long fenzi,fenmu;
}Num;
Num num[101];
ll gcd(ll a ,ll b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    int n;
    ll m=1,z=0,fz,fm;
    cin>>n;
    scanf("%lld/%lld",&z,&m);
    int tmp=gcd(z,m);
    if(z){
        z/=tmp;m/=tmp;
    }
    for(int i=2;i<=n;i++)
    {
        scanf("%lld/%lld",&fz,&fm);
        int lcp=m/gcd(m,fm)*fm;
        z=z*lcp/m+fz*lcp/fm;
        m=lcp;
        int t=gcd(z,m);
        if(t)
        {
            z=z/t; m=m/t;
        }
    }
    if(z&&z/m==0)
    cout<<z%m<<"/"<<m;
    else if(z%m==0) cout<<z/m;
    else cout<<z/m<<" "<<z%m<<"/"<<m;
    return 0;
}

7-9 名人堂与代金券 (25分)

思路:结构体排序,相同成绩的注意名次标记。

#include<bits/stdc++.h>
using namespace std;
struct Student
{
    string s;
    int score;
}str[10010];
bool cmp(Student a,Student b)
{
    if(a.score==b.score)return a.s<b.s;
    else return a.score>b.score;
}
int main()
{
   int n,g,k,i,j;
  // string s[10010];
   int ct=0;
   cin>>n>>g>>k;
   for(i=0;i<n;i++)
   {
       cin>>str[i].s;
       getchar();
       cin>>str[i].score;
       if(str[i].score>=g&&str[i].score<=100)ct+=50;
       else if(str[i].score>=60&&str[i].score<g)ct+=20;
   }
   int m=0;
   sort(str,str+n,cmp);
   cout<<ct<<endl;
   int r=0,q=0;
   for(i=0;i<n;i++)
   {
       if(q!=str[i].score&&i>=k)break;
       if(q!=str[i].score)
       {
           r=i+1;
       }
       cout<<r<<" "<<str[i].s<<" "<<str[i].score<<endl;
       q=str[i].score;

   }

}

7-12 月饼 (25分)

思路:按照单价进行结构体排序,从单价大的开始卖(简单模拟)。

#include<bits/stdc++.h>
using namespace std;
typedef struct
{
    double total_price,amount,per_price;
}mooncake;
mooncake p[1001];
bool cmp(mooncake a,mooncake b)
{
    return a.per_price>b.per_price;
}
int main()
{
    int n;
    double d;
    cin>>n>>d;
    int i;
    for(i = 0;i < n;i++)
    {
        cin>>p[i].amount;
    }
    for(i = 0 ;i < n;i++)
    {
        cin>>p[i].total_price;
    }
    for(i = 0;i < n;i++)
    {
        p[i].per_price = p[i].total_price/p[i].amount;
    }
    sort(p,p+n,cmp);
    double sum = 0;
    for(i = 0;i < n&&d>0;i++)
    {
        if(d>p[i].amount)
        {
            d = d-p[i].amount;
            sum = sum+p[i].total_price;
        }
        else if(d<=p[i].amount)
        {
            sum = sum+d*p[i].per_price;
            d = 0;
        }
    }
    printf("%.2lf\n",sum);
}
全部评论

相关推荐

理智的马里奥不愿再收感谢信:这小米咱是非去不可了是吗?
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务