2015-J. PUMA

描述

(题名来源:2009年校队出战合肥现场赛曾用队名)

PUMA是全球著名的运动品牌,PUMA的鞋与服饰在嘻哈涂鸦文化中受到全球各地年轻人的极度欢迎,同时PUMA与adidas更是1970与1980年代嘻哈文化的代表。PUMA公司是德国一家以生产鞋与运动服为主的大型跨国公司。该公司于1948年成立于德国荷索金米兰,PUMA中文作彪马,意为美洲狮,创始人为鲁道夫•达斯勒(Rudolf Dassler)。 鲁道夫•达斯勒于1924年加入了弟弟阿道夫•达斯勒(昵称阿迪Adi)位于赫若拉赫的达斯勒公司,并即将公司更名为达斯勒兄弟公司。1930年代中期,达斯勒兄弟公司成长为具有近百名员工、有三十余种款式的全球运动鞋领导品牌。第二次世界大战后,达斯勒兄弟公司复业,有47名员工,并以帆布与美军燃油槽提炼出橡胶,制成战后第一款运动鞋。1948年阿道夫•达斯勒以其自身姓名的组合Adi与das将达斯勒兄弟公司更名为adidas(阿迪达斯),两兄弟从此分道扬镳,哥哥鲁道夫•达斯勒另成立了PUMA公司,与adidas的方向相同,都以体育用品生产为主,两人从此成为竞争对手。 南邮首次参加ACM/ICPC亚洲区域赛的PUMA队神牛们都是PUMA控(运动达人),在为南邮首次获得此项赛事奖牌后,教练特别高兴,全额资助他们到PUMA合肥专卖店购买PUMA运动鞋。已知各位神牛们所选购的运动鞋的单价、数量、折扣率,教练根据购买单需要支付多少钱呢?

输入

输入包括T+1行。描述神牛们的购买清单。 第一行给出一个正整数T (1≤T≤1,000),表示有T款运动鞋。 接下来有T行,每行给出一款运动鞋信息,若该款运动鞋不打折,则先后给出每种款运动鞋单价P、所购买的数量Q;若打折,则先后给出每种款运动鞋单价P、所购买的数量Q、折扣率C% (1≤P≤1,000, 1≤Q≤50, 1≤C≤99),P, Q, C均为正整数。 输入数据之间均以空格分隔,行末没有空格。

输出

输出一行,包含一个正数,保留2位小数,表示教练需要支付的钱。

样例输入

2

346 2

271 5 50%

样例输出

1369.50


刚开始看这一题时,觉得应该不难,但是实现时还是遇到很多问题,而且后来我似乎还把问题复杂化了,我定义了结构体shoe,但在处理第一组数据时处理不好,虽然学会了字符串到整型的模拟。

后来参考了一些其他的程序(自己写的修改好的程序放在最下面,已通过),下面是解决问题过程中参考的程序:

#include<stdio.h>
int main()
{
int T,Q,P,C;
int i;
char y,x;
double j,k;
scanf("%d",&T);
k=0;
for(i=0;i<T;i++)
{
scanf("%d%d",&P,&Q);
y=getchar();
if(y==' ')
{
scanf("%d",&C);
x=getchar();
j=(P*Q*(1-C*0.01));
}
else
j=(P*Q);
k=k+j;
}
printf("%.2f\n",k);
return 0;
}


然后遇到了一个奇葩的程序,运行结果不对但是可以“Accepted“。不知道是不是我没看出来,有看出来的大神请教教我。

#include <iostream>
 using namespace std;

 int main()
 {
     int t,a,b;
     double s=0,m;
     int i;
     char c[3],ch;
     cin>>t;
     while(t--)
     {
         cin>>a>>b;
         if(cin.get(ch)&&ch!='\n')
         {
             cin>>c;
             for(i=3;i>=0;i--)
             {
                 if(c[i]=='%')
                 {
                     if(i==2)
                         m=(c[i-1]-'0')+(c[i-2]-'0')*10;
                     else
                         m=(c[i-1]-'0');
                 }
             }
             s=s+a*b*((100-m)/100);
         }
         else
         {
             s=s+a*b;
         }
     }
     printf("%.2f\n",s);
     return 0;
 }


然后还有一个程序,自己遇到的,运行结果没问题,但就是通不过的,后来修改后的代码如下,已经可以通过了:

#include<iostream>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<map>
#include<math.h>
#include<vector>
#include<stack>
#include<cmath>
#include<algorithm>
#include<sstream>
#include<strstream>
using namespace std;
/*
const int N=1000;
struct shoe
{
    int price;
    int num;
    char percent[10];
    double per;
};

int main()
{
    int n;
    double money=0;
    shoe sh[N];
    std::stringstream stream;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
      sh[i].per=0;
      scanf("%d%d%s",&sh[i].price,&sh[i].num,&sh[i].percent);
      if(strlen(sh[i].percent)==0||strcmp(sh[i].percent,"100%")==0)
      {
                sh[i].per=0;
      }
      else
      {
          stream<<sh[i].percent;
          stream>>sh[i].per;
          sh[i].per/=100;
      }
        money+=sh[i].price*sh[i].num*(1-sh[i].per);
        printf("%.2f\n",money);
    }
    printf("%.2f\n",money);
    return 0;
}
*/

int main()
{
    int t;
    double j=0,p,q,s=0;
    double c;
    char ch;
    scanf("%d",&t);
    for(int i=0;i<t;i++)
    {
        scanf("%lf%lf",&p,&q);
        ch=getchar();
        if(ch==' '){
            scanf("%lf",&c);
        ch=getchar();  //这句没有不行
            j=p*q*(1-c*0.01);
        }
        else
          {
             j=p*q;
           //  printf("nei%.2f\n",s);
          }
       s+=j;
      // printf("neizong%.2f\n",s);
    }
    printf("%.2f\n",s);
    return 0;
}


底下给出自己的,也算是站在巨人的肩膀上了。

#include<iostream>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<map>
#include<math.h>
#include<vector>
#include<stack>
#include<cmath>
#include<algorithm>
#include<sstream>
#include<strstream>
using namespace std;
const int N=1000;
struct shoe
{
    int price;
    int num;
    int percent;
};

int main()
{
    int n;
    double money=0;
    shoe sh[N];
    char char1,char2;
    std::stringstream stream;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
      scanf("%d%d",&sh[i].price,&sh[i].num);
      char1=getchar();
      if(char1==' ')
      {
         scanf("%d",&sh[i].percent);
         char2=getchar();
         money+=sh[i].price*sh[i].num*(1-0.01*sh[i].percent);
      }
      else
      {
           money+=sh[i].price*sh[i].num;
      }
    }
    printf("%.2f\n",money);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值