yzzbianchen 2024-04-05 15:46 采纳率: 25%
浏览 4

小猴编程c++时间胶囊


#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
 
bool monthEnd(int year,int month,int day)
{
    if (day==31) return true;
    else if (day==30&&(month==4||month==6||month==9||month==11)) 
        return true;
    else if (day==29&&month==2)
        return true;
    else if (day==28&&month==2&&(!(year%4==0&&year%100!=0||year%400==0)))
        return true;
    else
         return false;
} 
 
int main()
{
    int year,month,day,m=0;
    scanf("%d-%d-%d",year,month,day);
    cin>>m; 
    for (int i=0;i<m;i++) 
    {
        if (monthEnd(year,month,day)) 
        {
            month++;day=1;
            if (month==13)
            {
                year++;month=1; 
            } 
        }
        else
            day++; 
    }
    printf("%d-%02d-%02d\n",year,month,day);     
    return 0; 
} 

问一下为什么会超时(小猴编程)

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-04-05 15:46
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题分析:

    该程序中出现超时的原因是因为格式输入与scanf函数的语法不符,致使程序陷入了死循环,无法停止。具体来说,scanf函数对于整数类型的变量需要传入指针(即&变量名),而该程序中只传入了变量名,导致输入错误,程序一直循环运行,出现超时。

    解决方案:

    • 将scanf函数的格式参数改为"%d-%d-%d",且对于第二行m的输入,应该使用cin进行输入。这样可以避免格式输入时出现错误。
    • 在调用scanf函数之前,应该对每个变量进行初始化,否则可能导致程序输出错误结果。

    修改后的代码如下:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月5日