一个acm题目问下,应该不会很难,但是么做出来

发票统计
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
有一个小型的报账系统,它有如下功能:
(1)统计每个人所报发票的总钱数
(2)统计每类发票的总钱数
将此系统简化为如下:假设发票类别共有A、B、C三种;一共有三个人,ID分别为1、2、3。

输入
系统输入包含三行,每行第一个数为人员ID(整型,1或2或3),第二个数为发票总张数(张数不超过100),之后是多个发票类别(字符型,A或B或C)和相应发票金额(单进度浮点型,不超过1000.0)。
输出
输出包含六行,前三行为每人(按ID由小到大输出)所报发票总钱数(保留两位小数),后三行为每类发票的总钱数(保留两位小数)。
样例输入
1 5 A 1.0 A 2.0 C 1.0 B 1.0 C 1
3 3 B 1 C 2 C 1
2 4 B 1 A 1 C 1 A 1
样例输出
1 6.00
2 4.00
3 4.00
A 5.00
B 3.00
C 6.00
————————————————————
我做出来的话只能接受单精度的数据
没办法接受整数
不过输入给出了整数不知道怎么改好
————————————————
我的代码如下
————————————————
#include“stdio.h”
typedef struct {
char ch[100];
float a[100];
}node[1000];
int main()
{
node p1;
int n, m;
char ch;
float d, sum = 0, s[3] = { 0.0 };
int i, j, k[3] = { 0 }, t, q;
for (i = 0; i < 3; i++)
{
p1[i].ch[100] = NULL;
p1[i].a[100] = { 0.0 };
}
for (t = 0; t<3; t++)
{
scanf_s("%d%d", &n, &m);
for (j= 0; j<m; j++)
{
getchar();
ch = getchar();
scanf_s("%f",&d);
p1[n-1].ch[k[n-1]] = ch;
p1[n-1].a[k[n-1]] = d;
k[n-1]++;
}
printf("%d\n", k[n - 1]);
}
for (i = 0; i<3; i++)
{
printf("%d ", i + 1);
for (t = 0; t<k[i]; t++)
sum += p1[i].a[t];
printf("%0.2f\n", sum);
sum = 0;
}
for (i = 0; i<3; i++)
{
for (t = 0; t < k[i]; t++)
{
if (p1[i].ch[t] == 'A')
s[0] += p1[i].a[t];
else if (p1[i].ch[t] == 'B')
s[1] += p1[i].a[t];
else if (p1[i].ch[t] == 'C')
s[2] += p1[i].a[t];
}
}
printf("%c %0.2f\n", 'A', s[0]);
printf("%c %0.2f\n", 'B', s[1]);
printf("%c %0.2f\n", 'C', s[2]);
return 0;
}

查看全部
NeQrhk
NeQrhk
2015/07/30 13:22
  • acm
  • acm icpc
  • 点赞
  • 收藏
  • 回答
    私信

3个回复