天天看點

【C語言】Simple Sorting(結構)

  • 題目描述

        dww想給gf買芒果幹,由于勤儉節約,是以dww想先在 n家店中挑出 m家成本效益最好的然後再細選。由于包裝規格以及降低難度,是以不考慮芒果幹品質,隻要考慮價格以及商家給的優惠。芒果幹原價為p元:

1)整數 z : 不為0時,表示商家打 z折;

2)整數 y : 不為0時,表示dww需要付 y元運費;

3)整數g, h :不為0時,表示滿 g元減 h元;

        當兩家價格一緻時,以商家店名的字典序排序。可參考樣例。請幫dww挑選這m家店,并計算相應需要花費的價格。

  • 輸入

一行包含兩個整數 n, m ( 0 < m <= n < 1000 )

接下來 n行,每行包括店名 s 以及各整數 p, z ( 0 < z < 10 ), y, g, h ( 0 <= h <= g <= p < 105)

  • 輸出

輸出 m 行排序後的結果,每行包括店名,以及最終價格

  • 樣例輸入
3 3
Threesquirrels 24 9 5 20 1
Lppz 27 0 7 0 0
Becheery 28 0 7 20 1
           
  •  樣例輸出
Threesquirrels 25.60
Becheery 34.00
Lppz 34.00
           
 考察結構的運用。
#include <stdio.h>
#include <string.h>
typedef struct stores
{
    char name[100];
    double p,z,y,g,h,result;
}st;

int main()
{
    int i,j,n,m;
    scanf("%d %d",&n,&m);
    st s[100];
    st t;
    for(i=0;i<n;i++)
    {
        scanf("%s", s[i].name);
        scanf("%lf %lf %lf %lf %lf",&s[i].p,&s[i].z,&s[i].y,&s[i].g,&s[i].h);
        s[i].result=s[i].p;
        if(s[i].z!=0)
            s[i].result=s[i].p*s[i].z/10;
        if(s[i].y!=0)
            s[i].result=s[i].result+s[i].y;
        if(s[i].g!=0&&s[i].h!=0)
        {
            if(s[i].result>=s[i].g)
                s[i].result-=s[i].h;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(s[i].result>s[j].result)
            {
                t=s[i];
                s[i]=s[j];
                s[j]=t;
            }
             else if(s[i].result==s[j].result)
            {
                if('s[i].name[0]'>'s[i].name[0]')        //若相等按ASCII碼排序。
                {
                t=s[i];
                s[i]=s[j];
                s[j]=t;
                }
            }
        }
    }
    for(i=0;i<m;i++)
    {
        printf("%s %.2f\n",s[i].name,s[i].result);
    }

    return 0;
}