鱼C论坛

 找回密码
 立即注册
查看: 4420|回复: 38

[已解决]计算天数 每周一练(3)(3星题目)

[复制链接]
发表于 2021-8-18 20:42:45 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 wangka 于 2021-8-19 19:50 编辑

每周一练又来了(本周第二次)
题目描述

输入年份与月份,求该月共有多少天。
输入两个空格隔开的正整数year和month,分别表示年
份和月份输出对应这一年这个月的天数。

例子,分别输入2008 和2
输出29



                               
登录/注册后可看大图

不要抄袭/灌水哦!
最佳答案
2021-8-18 20:42:46
Max472 发表于 2021-8-19 20:31
那要处理字母的话改成char类型?
但是那样年份不就越界了吗
#include <stdio.h>

int main(void)
{
    int day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int Leap_Feb = 29;
    int year, month;

    printf("请输入年份和月份:\n");    
    while(1) {
        if(scanf("%d %d", &year, &month) == 2) break;
        while(getchar() != '\n');
        printf("年份或月份输入错误,请重新输入!\n");
    }
    /*
    scanf("%d %d", &year, &month);
    
    while ( year<0 || month<1 || month >12 )
    {
        printf("年份或月份输入错误,请重新输入!\n");
        scanf("%d %d", &year, &month);
    }
    */
    
    if ( !year%400 || (!year&4 && !year%100) )
    {
        if ( 2 == month )
            printf("%d\n", Leap_Feb);
        else
            printf("%d\n", day[month - 1]);
    }
    else
        printf("%d\n", day[month - 1]);
    
    return 0;
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 20:42:46 | 显示全部楼层    本楼为最佳答案   
Max472 发表于 2021-8-19 20:31
那要处理字母的话改成char类型?
但是那样年份不就越界了吗
#include <stdio.h>

int main(void)
{
    int day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int Leap_Feb = 29;
    int year, month;

    printf("请输入年份和月份:\n");    
    while(1) {
        if(scanf("%d %d", &year, &month) == 2) break;
        while(getchar() != '\n');
        printf("年份或月份输入错误,请重新输入!\n");
    }
    /*
    scanf("%d %d", &year, &month);
    
    while ( year<0 || month<1 || month >12 )
    {
        printf("年份或月份输入错误,请重新输入!\n");
        scanf("%d %d", &year, &month);
    }
    */
    
    if ( !year%400 || (!year&4 && !year%100) )
    {
        if ( 2 == month )
            printf("%d\n", Leap_Feb);
        else
            printf("%d\n", day[month - 1]);
    }
    else
        printf("%d\n", day[month - 1]);
    
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 20:56:48 | 显示全部楼层
n=input("输入:")
n=n.split("  ")
def a(e,f):
    if e==9 or e==4 or e==6 or e==11:
        print("30")
    elif f:
        print("29")
    elif not f:
        print("28")
    else:
        print("31")
if (int(n[0])%4==0 and int(n[0])%100):
    a(int(n[1]),1)
elif int(n[0])%400:
    a(int(n[1]),1)
else:
    a(int(n[1]),0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 21:24:49 | 显示全部楼层
本帖最后由 Max472 于 2021-8-18 21:33 编辑
#include <stdio.h>

int main(void)
{
    int day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int Leap_Feb = 29;
    int year, month;

    printf("请输入年份和月份:\n");    
    scanf("%d %d", &year, &month);
    
    while ( year<0 || month<1 || month >12 )
    {
        printf("年份或月份输入错误,请重新输入!\n");
        scanf("%d %d", &year, &month);
    }
    
    if ( !year%400 || (!year&4 && !year%100) )
    {
        if ( 2 == month )
            printf("%d\n", Leap_Feb);
        else
            printf("%d\n", day[month - 1]);
    }
    else
        printf("%d\n", day[month - 1]);
    
    return 0;
}

评分

参与人数 1鱼币 +5 收起 理由
人造人 + 5 我对不起你,^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 22:23:49 | 显示全部楼层
你这题目错了吧   2009年不是闰年是平年 2月份只有28天而不是29天

评分

参与人数 1鱼币 +1 收起 理由
wangka + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 22:58:51 | 显示全部楼层
#include <stdio.h>

void main(){
        int y,m;
        printf("请输入要查询的年份和月份:");
        scanf("%d %d",&y,&m);
       
        if(y%4==0){
                if(m==2){
                        printf("29");
                }else if(m == 1||m ==3||m ==5||m ==7||m ==8||m ==10||m ==12){
                        printf("31");
                }else{
                        printf("30");
                }
        }else{
                if(m == 1||m ==3||m ==5||m ==7||m ==8||m ==10||m ==12){
                        printf("31");
                }else if(m == 2){
                        printf("28");        
                }else{
                        printf("30");
                }
        }
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 23:26:32 | 显示全部楼层
#include <stdio.h>

void main(){
        int y,m;
        printf("请输入要查询的年份和月份:");
        scanf("%d %d",&y,&m);
       
        //2009 2 28
        //2009 3 31
        //2009 4 30
        //2016 2 29
        //2016 3 31
        //2016 4 30
        if(m==2){
                if(y%4==0){
                        printf("29");
                }else{
                        printf("28");
                }
        }else if(m == 1||m ==3||m ==5||m ==7||m ==8||m ==10||m ==12){
                printf("31");
        }else{
                printf("30");
        }
}

评分

参与人数 1鱼币 +1 收起 理由
wangka + 1 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 07:50:38 | 显示全部楼层
啊.....
抱歉抱歉,眼瞎....
原来要求用c...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 12:20:30 | 显示全部楼层
nonleap_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
leap_year = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

i = input('年份和月:')
year_month = i.split()

year = int(year_month[0])
month = int(year_month[1])

if year % 400 == 0:
    print(leap_year[month-1])
else:
    if year % 4 == 0 and year % 100 != 0:
        print(leap_year[month-1])
    else:
        print(nonleap_year[month-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 17:17:15 | 显示全部楼层
#include<stdio.h>

int main(void)
{
        int year, month;

        printf("请输入年份和月份中间用两个空格隔开 :");
        scanf_s("%d  %d", &year, &month);
        switch (month)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:printf("该月份有31天\n"); break;
        case 2:
        {
                if (!(year % 400) || (year % 4 == 0 && year % 100 != 0))
                        printf("该月份有29天\n");
                else printf("该月份有28天\n");
                break;
        }
        case 4:
        case 6:
        case 9:
        case 11:
                printf("该月份有30天!\n");
                break;
        default: printf("请正确输入!\n");
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 19:39:07 | 显示全部楼层
鑫空闪烁 发表于 2021-8-18 22:23
你这题目错了吧   2009年不是闰年是平年 2月份只有28天而不是29天

打错了,不好意思,谢指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 19:39:44 | 显示全部楼层
青出于蓝 发表于 2021-8-19 07:50
啊.....
抱歉抱歉,眼瞎....
原来要求用c...

没事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 19:44:50 | 显示全部楼层

这错太多了(可以改)。1,输入没有间隔。2,输出有误。3,你的重新输入while有没有停止(差点把我电脑炸了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 19:46:16 | 显示全部楼层
本帖最后由 wangka 于 2021-8-19 19:49 编辑


void main ()改成int main
还有如果输入不符合的东西(如13月,字母等)没有重新输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 19:49:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 19:51:38 | 显示全部楼层

会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 20:05:20 | 显示全部楼层
wangka 发表于 2021-8-19 19:44
这错太多了(可以改)。1,输入没有间隔。2,输出有误。3,你的重新输入while有没有停止(差点把我电脑炸 ...

没有啊,我用的 code blocks 20.03
PB6QZUE1%_MBFPP9X`{K[8W.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 20:08:25 | 显示全部楼层
Max472 发表于 2021-8-19 20:05
没有啊,我用的 code blocks 20.03

你随便打几个字母呢?(电脑炸了不要怪我)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 20:15:13 | 显示全部楼层
wangka 发表于 2021-8-19 20:08
你随便打几个字母呢?(电脑炸了不要怪我)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-19 20:15:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 04:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表