zoukankan      html  css  js  c++  java
  • 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
    ",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!='
    ')
             {
                 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
    ",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
    ",money);
        }
        printf("%.2f
    ",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
    ",s);
              }
           s+=j;
          // printf("neizong%.2f
    ",s);
        }
        printf("%.2f
    ",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
    ",money);
        return 0;
    }
    



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    golang_并发安全: slice和map并发不安全及解决方法
    什么情况下需要用到互斥锁sync.Mutex?
    使用Charles进行HTTPS抓包
    centos6 yum 源失效 404,终于解决了
    GOMAXPROCS你设置对了吗?
    容器资源可见性问题与 GOMAXPROCS 配置
    gflags 使用方式
    分布式训练问题
    NCCL常用环境变量
    git 常用命令
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965780.html
Copyright © 2011-2022 走看看