买文具

Problem Description
bLue 带了 m 元钱去商店买文具,柜台上剩有 n 个文具套装,每个套装售价 ai 元,内含 bi 件相同种类的文具。

现在 bLue 想用身上的钱购买尽可能多的文具,你能帮他计算最多可以买到多少件文具吗?

由于店老板看 bLue 是老顾客,文具套装可以拆开卖,单件售价为 ai/bi(保证可以整除且单价至少为 1)。

Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。

对于每组数据:

第 1 行输入 2 个整数 n (1 <= n <= 100) 和 m (1 <= m <= 10000),分别表示可购买套装的数量和 bLue 携带的钱数
接下来 n 行,每行输入 2 个整数 ai (1 <= ai <= 1000) 和 bi (1 <= bi <= 10),分别表示第 i 个套装的售价和其中文具的件数
Output
对于每组数据,在 1 行中输出 1 个整数,表示 bLue 最多可以买到的文具数量。

Sample Input
3 5
4 2
2 1
1 1
4 20
5 5
8 1
5 5
12 3
Sample Output
3
12

#include 
#include 
struct wenju
{
    int a;
    int b;
    int ave;
}st[1000],t;
int main()
{
   int n,m,i,j;
   while(~scanf("%d %d",&n,&m))
   {
       for(i=0;i<=n-1;i++)
       {
           scanf("%d %d",&st[i].a,&st[i].b);
           st[i].ave=st[i].a/st[i].b;
       }
       for(i=0;i<=n-2;i++)
       {
           for(j=0;j<=n-2-i;j++)
           {
               if(st[j].ave>st[j+1].ave)
               {
                   t=st[j];st[j]=st[j+1];st[j+1]=t;
               }
           }
       }
       int sum=0;
       for(i=0;i<=n-1;i++)
       {
           if(m>st[i].a)
           {
               sum=sum+st[i].b;
               m=m-st[i].a;
           }
           else
           {
               sum=sum+(m/st[i].ave);
               break;
           }
       }
       printf("%d\n",sum);

   }
    return 0;
}

你可能感兴趣的:(数据结构)