这是原题截图,来自pta
输入样例:
3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
输出样例:
2 196
0 0
1 60
#include<iostream>
using namespace std;
int hh,mm,g,i=0,id[10][1001][2]={0};
int main(){
char ch;
int n,num=0,time=0; cin>>n;
while(i<n){
/*i用于确定输入量,表示当前输入的为第i+1天的信息,同时,当日期更新时id不做归零处理,而采用i++。*/
scanf("%d %c %d:%d",&g,&ch,&hh,&mm);
if(!g){
//g接收书号,为零的时候本天结束,日期更新
i++;
if(num) printf("%d %.0lf\n",num,(double)time/num);//%.xlf 四舍五入
else printf("0 0\n");
num=time=0;
continue;
}
if(ch=='S'){//借书
id[i][g][0]=1;//初始或在馆状态为0 ;借出状态为1
id[i][g][1]=hh*60+mm;//以分钟数储存借出时间
}
else if(ch=='E' && id[i][g][0]==1){//还书
id[i][g][0]==0;// 书籍归馆状态归0
time+=hh*60+mm-id[i][g][1];//计算时间
num++;
}
}
return 0;
}
你的解题思路没有问题,只是有个小错误。id[i][g][0]==0;
这句应改为id[i][g][0]=0;
求大佬看一下错在哪了,一直过不了,非常您的感谢解答
代码量有点大
计算分钟借鉴了:https://ask.csdn.net/questions/749189
#include <iostream>
using namespace std;
int c(string time1,string time2)
{
int h1, m1;
int h2, m2;
int h, m;
sscanf(time1.c_str(), "%d:%d", &h1, &m1);
sscanf(time2.c_str(), "%d:%d", &h2, &m2);
if (m2 < m1)
{
m = m2 + 60 - m1;
h2--;
}
else
{
m = m2 - m1;
}
if (h2 < h1)
{
h = h2 + 24 - h1;
}
else
{
h = h2 - h1;
}
return h*60+m;
}
int main()
{
int count=0,j,k,i,n,t[1000],h=0,flg=0,p=0,t2=0;
char r[1000];
int pos1=0,pos2=0,tem;
string w[1000];
cin >> n;
while(count<n)
{
cin >>t[h];
cin >>r[h];
cin >>w[h];
if(t[h]==0)
count++;
h++;
}
for(j=0; j<h; j++)
{
p=0;
if(t[j]==0)
{
for(k=flg; k<j; k++)
{
for(i=flg; i<j; i++)
{
if(t[k]==t[i]&&r[k]-r[i]=='S'-'E')
{
p++;
pos1=k;
pos2=i;
t2+=c(w[pos1],w[pos2]);
}
}
}
if(p==0)
cout << 0<<" "<< 0 << endl;
else
{
if((double)t2/p-int(t2/p)>=0.5)
tem=t2/p+1;
else
tem=t2/p;
cout << p<<" "<<tem<<endl;
flg=j+1;
t2=0;
}
}
}
}
你这块逻辑不对: