题目大意:
查话费记录和账单,我理解完就码了还花了挺长时间的,自己做搞不出来唉。到时候再做一遍吧,看看理解能深入点不。
思路:
先全部排序,排序方法如题意思(见代码),然后先扫描相同名字的记录,如果有接通和挂断的就是一个有效通话记录,进行标记,然后再在这个名字里面的查询输出每一条有效通话信息,如果没有标记就不输出,进入下一个名字的人循环。难点还有算钱和时间的计算(一起计算,每加一分钟就加相应的钱。) ————————————————————————
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std
;
struct record
{
char name
[25];
int MM
, dd
, hh
,mm
;
bool status
;
}rec
[1010],temp
;
int toll
[24];
bool cmp(record a
, record b
)
{
int s
= strcmp(a
.name
, b
.name
);
if (s
!= 0)return s
< 0;
else if (a
.MM
!= b
.MM
)
return a
.MM
< b
.MM
;
else if (a
.dd
!= b
.dd
)
return a
.dd
< b
.dd
;
else if (a
.hh
!= b
.hh
)
return a
.hh
< b
.hh
;
else
return a
.mm
< b
.mm
;
}
void cost(record a
, record b
,int& time
,int& money
)
{
temp
= a
;
while (temp
.dd
< b
.dd
|| temp
.hh
< b
.hh
|| temp
.mm
< b
.mm
)
{
time
++;
money
+= toll
[temp
.hh
];
temp
.mm
++;
if (temp
.mm
>= 60)
{
temp
.mm
= 0;
temp
.hh
++;
}
if (temp
.hh
>= 24)
{
temp
.hh
= 0;
temp
.dd
++;
}
}
}
int main()
{
for (int i
= 0; i
< 24; i
++)
{
cin
>> toll
[i
];
}
int n
;
cin
>> n
;
char line
[10];
for (int i
= 0; i
< n
; i
++)
{
cin
>> rec
[i
].name
;
scanf_s("%d:%d:%d:%d", &rec
[i
].MM
, &rec
[i
].dd
, &rec
[i
].hh
, &rec
[i
].mm
);
cin
>> line
;
if (strcmp(line
, "on-line") == 0)
{
rec
[i
].status
= true;
}
else
{
rec
[i
].status
= false;
}
}
sort(rec
, rec
+ n
, cmp
);
int on
=0,off
, next
;
while (on
< n
)
{
int needprint
= 0;
next
= on
;
while (next
< n
&& strcmp(rec
[next
].name
, rec
[on
].name
) == 0)
{
if (needprint
==0 && rec
[next
].status
==true)
{
needprint
= 1;
}
else if (needprint
== 1 && rec
[next
].status
== false)
{
needprint
= 2;
}
next
++;
}
if (needprint
< 2)
{
on
= next
;
continue;
}
int allmoney
= 0;
printf("%s d\n", rec
[on
].name
, rec
[on
].MM
);
while (on
< next
)
{
while (on
< next
- 1 && !(rec
[on
].status
==true && rec
[on
+ 1].status
==false))
{
on
++;
}
off
= on
+ 1;
if (off
== next
)
{
on
= off
;
break;
}
printf
("d:d:d ", rec
[on
].dd
, rec
[on
].hh
, rec
[on
].mm
);
printf("d:d:d ", rec
[off
].dd
, rec
[off
].hh
, rec
[off
].mm
);
int time
= 0, money
= 0;
cost(rec
[on
], rec
[off
], time
, money
);
allmoney
+= money
;
printf("%d $%.2f\n", time
, money
/ 100.0);
on
= off
+ 1;
}
printf("Total amount: $%.2f\n", allmoney
/ 100.0);
}
return 0;
}