PAT A/甲级1016 Phone Bills 测试点123勘误


题目链接

出错点

  1. 名字长度不超过20,则数组长度应至少为21,用以容纳‘\0’,卡测试点123。
  2. 输入数据至少有一对配对(…at least one call is well paired in the input…),则可能存在有用户没配对的情况,注意不要输出。
  3. 代码的其他漏洞。毕竟这题的代码量真心大~~万一哪里的逻辑有点错误,找起来是真的费劲。我写输出数据的那层循环时,脑子一抽把判断下一条记录的名字与当前记录不相等放在循环的最后,仅仅当成退出循环的条件。错误部分的代码如下:
    for(i=0;i<m;i++){
   
        int flag=0;//判断是否符合条件并标记输出
        double totalmoney=0.0;
        for(j=k;j<n;j++){
   
            if(strcmp(node[j].line,"on-line")==0 && strcmp(node[j+1].line,"off-line")==0){
   
                if(flag==0){
   
                    printf("%s %02d\n",node[k].name,node[k].month);
                    flag=1;
                }
                printf("%02d:%02d:%02d %02d:%02d:%02d ",node[j].day,node[j].hour,node[j].minute,node[j+1].day,node[j+1].hour,node[j+1].minute);
                //下面两行求时差和费用的代码,有更简单的算法,见关键点2
                int temp=(node[j+1].day*24*60+node[j+1].hour*60+node[j+1].minute)-(node[j].day*24*60+node[j].hour*60+node[j].minute);
                double money=((node[j+1].day*dayfee+hourfee[node[j+1].hour]+fee[node[j+1].hour]*node[j+1].minute)-(node[j].day*dayfee+hourfee[node[j].hour]+fee[node[j].hour]*node[j].minute))/100.0;
                printf("%d $%.02f\n",temp,money);
                totalmoney+=money;
            }
            if(flag==1 && strcmp(node[j].name,node[j+1].name)!=0) printf("Total amount: $%.02f\n",totalmoney);
            //就是这里!!应该在内循环的开头就用if(strcmp(node[j].name,node[j+1].name)==0)过滤,else才是输出总费用并推出
            if(strcmp(node[j].name,node[j+1].name)!=0){
   
                  k=j+1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值