郑轻 2267 问题 J: Scholarship 2018郑州轻工业学院第十届ACM程序设计大赛暨河南高校邀请赛(正式赛)答案+解析+代码

本篇介绍了一个简单的算法挑战,通过分析8位数能否构成有效的年月日格式,涉及基本的数据处理和条件判断逻辑。代码示例使用C++实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题 J: Scholarship

时间限制: 1 Sec  内存限制: 128 MB
提交: 433  解决: 144
[ 提交][ 状态][ 讨论版][命题人: admin]

题目描述

小浩今年拿到了国家奖学金,本来很高兴的事,可小浩却默默不乐,原来是不愿请大家吃饭,小浩查了一下银行卡,一看还有8位数,于是嘴角向上微翘,冷笑一声,说想让我请客,先能回答出我的问题来。小浩的问题是给定一个8位的正整数,如果能判断出这8位数是否能组成一个日期的年月日(年份范围0000~9999),就可以请客,同学们还等什么,加油啦!

输入

输入有多行,每行一个8位的正整数。

输出

对于输入的每个整数,如果能组合成一个日期,输出“yes",否则,输出”no",每个输出占一行。

样例输入


32872313
10000000

样例输出


yes
no

思路:其实就需要考虑月日就可以了
         代码注意以下几种情况:
                一. 没有零月零日(8个数里最少有两个非零) 二.最小的数字为0,第二小的数只要小于三就行(0X月0X日或 0X月1X日0X月2X日)  三.最小的数字为1,第三小的数只要小于三就行(将上面的月份换为11月或12月,月份用两个小于三的数组成,日再用一个小于三的)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int arr[10];
int main()
{
    int n;
    while(cin >> n){
    for(int i=0;i<8;i++)
    {
        arr[i]=n%10;
        n=n/10;
    }
    sort(arr,arr+8);
    if(arr[6]==0) cout << "no" << endl;
    else if(arr[0]==0&&arr[1]<3) cout << "yes" << endl;
    else if(arr[0]==1&&arr[2]<3) cout << "yes" << endl;
    else cout << "no" << endl;
    }
    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值