亦清y 2021-12-28 12:23 采纳率: 71.4%
浏览 50
已结题

大一新生的c语言oj问题3

以下代码为什么只能在学校的Oj平台上通过67%的样例啊,谢各位指点。
自认为写的已经足够了。

img

img

img

#include<stdio.h>
int main()
{
    int a,b,i,j,k,n1,n2;
    while(~scanf("%d %d",&a,&b)){
    int sum=0;
    n1=a/10000;
    n2=b/10000;
    int x[4]={0};
    for(i=n1;i<=n2;i++){
        int day[99]={31,28,31,30,31,30,31,31,30,31,30,31};
        if((i%4==0&&i%100!=0)||i%400==0)
        day[1]=29;
    x[0]=i/1000;
    x[1]=i/100-x[0]*10;
    x[3]=i%10;
    x[2]=(i%100-x[3])/10;
        if(i*10000+x[3]*1000+x[2]*100+x[1]*10+x[0]>=a&&i*10000+x[3]*1000+x[2]*
        100+x[1]*10+x[0]<=b&&day[x[3]*10+x[2]-1]>=x[1]*10+x[0])
        sum++;
    }
printf("%d\n",sum);}
    return 0;
}


  • 写回答

1条回答 默认 最新

  • 神仙别闹 2021-12-28 12:27
    关注
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int date1,date2,ans=0;
        int  ms[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//列出每个月份对应的最大天数,注意2月份用最大29天
         cin>>date1>>date2;//输入起始结束日期
         d1=date1/10000, d2=date2/10000; //求出前四位,用年份枚举就可以
        for(int i=d1; i<=d2; i++){      //枚举前四位年份,然后转换成月和天
            int month=i%10*10+i/10%10;  //将i后两位转换成月份
            int day=i/100%10*10+i/1000; //将i前两位转换成天
            if(month<13 && ms[month]>=day)//判断月份是否合法&&天是否合法(通过上面一维数组查询)
                    ans++;
        }
        cout<<ans<<endl;
         return 0;
    }
    
    

    试试这个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月2日
  • 已采纳回答 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题