过一个测试点就15分了......
搞了一上午,搞出个15分,本以为一分也拿不到
思路跟《算法笔记》完全不一样,今天这道题就到这儿,明天再修改,花时间有点多了

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct
{
bool on_off_line;//1-在线,0-离线
int time, month,date,hour,min;
char name[21];
} Bill;
int rate[24];
Bill bill[1024];
bool cmp(Bill x, Bill y)
{
if (strcmp(x.name, y.name) != 0)
return strcmp(x.name, y.name) < 0;
else
return x.time < y.time;
}
int main()
{
int i, n, time, j;
double tax, total_tax;
char name[21];
string temp;
for (i = 0; i < 24; i++)
scanf("%d", &rate[i]);
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", &bill[i].name);
scanf("%d:%d:%d:%d", &bill[i].month, &bill[i].date, &bill[i].hour, &bill[i].min);
//将 (月:日:时:分) 转换为分钟
bill[i].time = bill[i].date * 24 * 60 + bill[i].hour * 60 + bill[i].min;
getline(cin, temp);
if(temp[2]=='n')
bill[i].on_off_line = 1;
else
bill[i].on_off_line = 0;
}
sort(bill, bill + n, cmp);
tax = total_tax = 0;
printf("%s %02d\n", bill[0].name, bill[0].date);
for (i = 0; i < n; i++)
{
if (strcmp(bill[i].name, bill[i + 1].name) != 0)
{
printf("Total amount: $%.2lf\n", total_tax / 100);
if (i + 1 < n)
printf("%s %02d\n", bill[i + 1].name, bill[i + 1].month);
total_tax = 0;
}
else
{
if (bill[i].on_off_line && !bill[i+1].on_off_line)
{
if (bill[i].date != bill[i + 1].date)
{
tax = (bill[i + 1].date - bill[i].date) * 355 * 60;
tax += bill[i + 1].min * rate[bill[i + 1].hour];
for (j = 0; j < bill[i + 1].hour; j++)
tax += rate[j] * 60;
tax -= bill[i].min * rate[bill[i].hour];
for (j = 0; j < bill[i].hour;j++)
tax -= rate[j] * 60;
time = bill[i+1].time - bill[i].time;
}
else
{
time = bill[i+1].time - bill[i].time;
tax = (60 - bill[i].min) * rate[bill[i].hour];
tax += bill[i + 1].min * rate[bill[i + 1].hour];
tax += (bill[i + 1].hour - bill[i].hour - 1) * rate[bill[i].hour + 1] * 60;
}
printf("%02d:%02d:%02d ", bill[i].date, bill[i].hour, bill[i].min);
printf("%02d:%02d:%02d ", bill[i + 1].date, bill[i + 1].hour, bill[i + 1].min);
printf("%d ", time);
printf("$%.2lf\n", tax / 100);
total_tax += tax;
}
}
}
getchar();
}
/*
CYJJ 1799 1
CYJJ 1860 0
CYLL 1801 1
CYLL 1923 0
CYLL 41261 1
CYLL 41285 0
aaa 1503 1
aaa 2881 1
aaa 7199 0
aaa 7344 1
*/
本文分享了一个使用C++实现的计费系统代码,详细展示了如何处理用户在线和离线状态,计算费用,并进行排序和输出。代码中包含了日期时间转换、费用计算逻辑和用户数据结构的设计。
3905

被折叠的 条评论
为什么被折叠?



