描述
(题名来源: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;
}