xjoi题库一级六段题解(c语言版)

某年某月有几天

时间:0.1s   空间:128M
题目描述:

闰年问题:已知某年某月,计算该月有几天。

输入格式:

输入一行,包含两个正整数year,month ,代表年和月

输出格式:

输出一行,包含一个整数。

样例输入:
2004 2

样例输出:
29
#include <stdio.h>
 
int main() {
    int year, month;
    scanf("%d%d", &year, &month);
    switch (month) {
        case 2:
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                printf("29");
            } else {
                printf("28");
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            printf("30");
            break;
        default:
            printf("31");
    }
 
    return 0;
}

 

Maoge的游戏

时间:1s  空间:256M

题目描述

Maoge和Maoge233玩一个游戏。

他有两堆石子,每次可以选择任意一堆任意个(至少一个),当一个人没有石子可取时,就输了。

Maoge先取,问最后谁能赢。假设都是以最优策略。

输入格式

一行两个数,x,y分别表示两堆石子的数量

输出格式

maoge或者maoge233。

样例输入

1 2

样例输出

maoge

约定:

x,y<=100000

#include <stdio.h>
 
int main() {
    int x, y;
    scanf("%d%d", &x, &y);
 
    if (x == y) {
        printf("maoge233");
    } else {
        printf("maoge");
    }
 
    return 0;
}

maoge的硬币

【题目描述】

maoge的桌子上有4枚硬币,有些正面朝上,有些反面朝上。现在maoge想请你帮他把这些硬币都变成同一面朝上,但是你每次能且只能翻三个硬币,请你求出最少翻转次数。

【数据格式】

输入一行,四个数字0/1,表示每个硬币的初始状态。

输出一个数,表示答案。

样例输入:

1 0 1 1

样例输出:

1

 

 

#include <stdio.h>
 
int main() {
    int coins[4];
    scanf("%d%d%d%d", &coins[0], &coins[1], &coins[2], &coins[3]);
    int positive = coins[0] + coins[1] + coins[2] + coins[3];
    int flips = positive == 4 || positive == 0 ;
    if(flips==1){
        printf("0");
    }else if(positive==3||positive==1){
        printf("1");
    }else{
        printf("2");
    }
    return 0;
}

自动找人系统

【题目描述】

给定三个参数a,b,c,表示年,月,日,(不考虑闰年)表示一个时间节点。他要找出在两个时间节点之间的时间(包括两个时间节点本身)。现在给定两个时间节点和一个时间,他要判断这个时间是否在这个时间段之中。

【数据格式】

输入三行,三个时间,每行有三个数,表示年月日。前两行表示两个时间节点(不一定按照第一个小于第二个的顺序给出),最后一行是这个时间发生的时间。保证合法

输出一个“Yes”或者“No”表示是否在这个时间段之中。

样例输入:

2007 1 1
2007 12 31
2007 3 22

样例输出:

Yes
#include <stdio.h>
 
int calc_days(int y, int m, int d) {
    int days_in_month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int days = y * 365 + d, i;
    for (i = 1; i < m; ++i) {
        days += days_in_month[i];
    }
    return days;
}
 
int main() {
    int a[3], b[3], c[3],i;
    for (i = 0; i < 3; i++) {
        scanf("%d%d%d", &a[i], &b[i], &c[i]);
    }
 
    int days_a = calc_days(a[0], b[0], c[0]);
    int days_b = calc_days(a[1], b[1], c[1]);
    int days_c = calc_days(a[2], b[2], c[2]);
    int start = (days_a < days_b) ? days_a : days_b;
    int end = (days_a > days_b) ? days_a : days_b;
    printf("%s", (days_c >= start && days_c <= end) ? "Yes" : "No");
    return 0;
}

年龄计算

时间:1s   空间:256M

题目描述

编写程序,输入某人的生日(年、月、日),并输入当前的日期(年、月、日),输出他的实际年龄(周岁),若生日超过当前日期,输出“-1”。

输入格式

6个整数,分别表示该学生的生日(年、月、日)和当前的日期(年、月、日) 

输出格式

一个整数.

样例输入
1990 2 28 
2000 3 4

样例输出
10
 
约定

保证输入数据是合法的日期

 

 

#include <stdio.h>
 
int main() {
    int y1, m1, d1, y2, m2, d2,i;
    scanf("%d%d%d%d%d%d", &y1, &m1, &d1, &y2, &m2, &d2);
    int y = y2 - y1;
    if (y1 > y2 || (y1 == y2 && (m1 > m2 || (m1 == m2 && d1 > d2)))) {
        printf("-1");
    } else {
        if(m2-m1>0||m2-m1==0&&d2-d1>=0){
            y=y;
        }else{
            y-=1;
        }
        printf("%d", y );
    }
    return 0;
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值