鹿见青山 2023-11-30 19:09 采纳率: 97.9%
浏览 9
已结题

Pa上中外星人的一天 不知道哪里出错了


#include <stdio.h>

int main()

{
 int n;
 int day,h,m;
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)
    {
scanf("%d %02d:%02d",&day,&h,&m);
       if(day==1||day==3||day==5)
           printf("%d %02d:%02d\n",day,h/2,(m+h%2*60)/2);
        if(day==0)
            printf("%d %02d:%02d\n",day,h,m);
         if(day==2||day==4||day==6)
          printf("%d %02d:%02d\n",day-1,(24+h)/2,(m+(h+24)%2*60)/2);

    }
    return 0;
}

pta上题,外星人的一天不知道哪里出错了,还有一个点测试没有通过。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-30 22:49
    关注

    【以下回答由 GPT 生成】

    这段代码存在一个问题,即在输入数据时,每个测试案例的第一行都以一个换行符结尾,而scanf函数中的"%d\n"的格式化字符串在读取整数之后会一直读取换行符,导致后面的输入不按照预期进行。解决这个问题的方法是将scanf函数中的"%d\n"改为"%d",即去掉换行符。

    以下为调试后的修正代码:

    #include <stdio.h>
    
    int main()
    {
        int n;
        int day, h, m;
        scanf("%d", &n); // 修改这一行
    
        for(int i=0; i<n; i++)
        {
            scanf("%d %02d:%02d", &day, &h, &m);
    
            if(day==1 || day==3 || day==5)
                printf("%d %02d:%02d\n", day, h/2, (m+h%2*60)/2);
    
            if(day==0)
                printf("%d %02d:%02d\n", day, h, m);
    
            if(day==2 || day==4 || day==6)
                printf("%d %02d:%02d\n", day-1, (24+h)/2, (m+(h+24)%2*60)/2);
        }
        return 0;
    }
    

    通过以上修改后的代码,应该可以解决您遇到的问题。请尝试使用修正后的代码进行测试。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 Qt4代码实现下面的界面
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥20 需要完整的共散射点成像代码