| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1610 人关注过本帖
标题:博弈题 日历游戏 求大神解答
只看楼主 加入收藏
月亮先生
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2018-2-7
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
博弈题 日历游戏 求大神解答
亚当和夏娃进入今年的ACM国际大学生程序设计竞赛。昨天晚上,他们玩了日历游戏,庆祝这个比赛。本场比赛由1900年1月1日至2001年11月4日比赛当日。游戏从这个间隔随机选择一个日期开始。然后,亚当和夏娃的球员轮流转牌,亚当,亚当,夏娃,亚当,夏娃等。动作只有一个规则,很简单:从现在的日期开始,他/轮到她可以移动到下一个日历日期或下个月的同一天。当下个月没有同一天时,玩家只移动到下一个日历日期。例如,从1924年12月19日起,你可以移动到1924年12月20日,下一个日历日期或1925年1月19日,下个月的同一天。但从2001年1月31日起,只能移动到2001年2月1日,因为2001年2月31日是无效的。

当他/她到达2001年11月4日的日期时,玩家获胜。如果玩家在2001年11月4日之后移动到某个日期,他/她将放弃游戏。

写一个程序,决定是否在初始日期,先行者亚当是否有一个成功的策略。

对于这个游戏,你需要确定闰年,二月有29天。在公历中,闰年发生在四年之内,可以被四整除。因此,1993年,1994年和1995年不是闰年,而1992年和1996年是闰年。另外,以00结尾的年份只有能被400整除时才是闰年。因此,1700,1800,1900,2100和2200不是闰年,而1600,2000和2400是闰年。

输入

输入由T测试用例组成。测试用例(T)的数量在输入的第一行给出。每个测试用例都写成一行,并对应于一个初始日期。YYYY MM DD中的三个整数表示YYYY年的MM月的第DD日的日期。请记住,从1900年1月1日到2001年11月4日这段时间,随机选择了最初的日期。

输出

为每个测试用例打印一行。对于亚当是否对夏娃制胜的问题,这条线应该包含“是”或“否”的答案。由于我们有T测试用例,你的程序应该输出总共T行“是”或“否”。


样本输入

3
2001 11 3
2001 11 2
2001 10 3


样本输入的输出

YES
NO
NO
搜索更多相关主题的帖子: 日历 游戏 日期 移动 闰年 
2018-02-07 23:15
月亮先生
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2018-2-7
收藏
得分:0 
求大佬帮忙
2018-02-07 23:23
月亮先生
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2018-2-7
收藏
得分:0 
#include <stdio.h>
int main() {
    int  n, i;
    int *year = (int *)calloc(n, sizeof(int));
    int *month = (int *)calloc(n, sizeof(int));
    int *day = (int *)calloc(n, sizeof(int));

    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf_s("%d %d %d", &year[i], &month[i], &day[i]);
    }
    if (month == 2 && day == 28) {
        printf("yes\n");
    }
    else if (month == 11 && day == 30) {
        printf("yes\n");
    }
    else if (month == 9 && day == 30) {
        printf("yes\n");
    }
    else for (i = 0; i < n; i++) {
        if ((month[i] + day[i]) % 2 == 0) {
            printf("yes\n");
        }
        else printf("no\n");
    }
    scanf_s("%d", &i);
    return 0;
}
2018-02-07 23:27
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:20 
这道题我没想到巧解的方法。

如果给我做,我会写一个递归函数——模拟遍历所有组合,然后看这些组合里有没有至少1次是亚当能赢的,如果有,则输出是,反之输出否。

当然,这样做开销会比较大,我只能保证结果是正确的,效率不晓得能不能过OJ的槛

φ(゜▽゜*)♪
2018-02-08 09:42
快速回复:博弈题 日历游戏 求大神解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013655 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved