描述
(题名来源: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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。