【CCF-CSP】日期计算

本文介绍了一个日期计算问题的解决方法,通过判断是否为闰年来确定一年中第d天的具体日期。给出了详细的输入输出格式及样例,并附带了C++实现代码。

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

试题编号:201509-2
试题名称:日期计算
时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

  给定一个年份y和一个整数d,问这一年的第d天是几月几日?
  注意闰年的2月有29天。满足下面条件之一的是闰年:
  1) 年份是4的整数倍,而且不是100的整数倍;
  2) 年份是400的整数倍。

输入格式

  输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
  输入的第二行包含一个整数dd在1至365之间。

输出格式

  输出两行,每行一个整数,分别表示答案的月份和日期。

样例输入

2015
80

样例输出

3
21

样例输入

2000
40

样例输出

2
9

思路:模拟

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int dir[4][2]= {1,0,0,1,-1,0,0,-1};
const double eps = 1e-6;
const int INF=0x3f3f3f3f;
const int MOD=1e9+7;
const int N = 1e3+5;

bool judgeYear(int y) {
    if(y%400==0||y%4==0&&y%100!=0) return true;
    return false;
}
int month[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
int main() {
    int y,d;
    scanf("%d%d",&y,&d);
    bool flag=judgeYear(y),flag2=0;
    for(int i=0; i<12; i++) {
        if(i==1) {
            if(flag) {
                if(d>month[i]+1) {
                    d-=(month[i]+1);
                } else {
                    flag2=1;
                }
            } else {
                if(d>month[i]) {
                    d-=month[i];
                } else {
                    flag2=1;
                }
            }
        } else {
            if(d>month[i]) {
                d-=month[i];
            } else {
                flag2=1;
            }
        }
        if(flag2) {
            printf("%d\n%d",i+1,d);
            break;
        }
    }
    return 0;
}

 

<think>嗯,用户正在准备CCF-CSP认证考试,想找些相对简单的真题来练习。根据用户提供的引用材料和历史对话,需要帮用户筛选出难度较低的真题,并给出具体解题思路。用户提到的引用内容里,引用1强调了"程序员需要有精益求精的工匠精神"和"数据表示需要优先考虑"这些考试要求。引用2说明CSP考试主要支持C++/Java/Python语言,而引用4给出的C++代码示例其实是个简单的字符替换题,这类题目就很适合作为入门练习。观察到用户特意标注"较为简单易于解答",猜测可能是刚接触CSP认证或者编程基础较薄弱。应该避开那些涉及复杂算法或数据结构的题目。从历史真题来看,模拟题第一题和第二题通常最简单,认证题的J组第一题也相对基础。在解题思路上,要特别强调引用1提到的两个关键点:一是数据表示(比如字母映射直接用字符数组),二是边界测试(考虑空字符串或特殊字符)。用户给出的示例代码也印证了这一点——就是个用数组实现的编解码器。用户引用的官方建议很重要:用STL能简化逻辑,Python用户可以用字典更高效解题。还需要提醒用户注意真题年份差异,比如2014年真题整体比2020年简单,而2020年J组第二题的"优秀的拆分"只要理解二进制特征就不难。最后建议用户优先练习字符处理和基础模拟类题目,这类题在早期真题中比例较高。解题时务必自己设计测试案例,包括题目样例之外的边界情况,这是引用1里特别强调的满分关键。</think> 以下是基于CCF-CSP认证考试真题中**较易解答的题目类型及代表性真题推荐**,结合引用内容中的考试特点和备考建议整理: --- ### **一、简单真题特征** 1. **题型常见**:字符处理、简单模拟、基础数学 2. **逻辑直接**:无需复杂算法,核心是**数据表示与条件翻译**(引用[1]强调“数据表示优先”) 3. **代码量少**:通常少于50行(如C++/Python) 4. **边界清晰**:特殊数据范围小,易设计测试用例(引用[1]建议自测边界) --- ### **二、推荐简单真题与解析** #### **1. 字符映射题(适合入门)** - **真题示例**:2020年CSP-J组第一题(引用[4]的代码) - **题目简化**: 给定字母替换规则(如`'A'→'C', 'B'→'S', ...`),将输入字符串按规则解码。 - **解题要点**: - **数据表示**:用数组存储映射表(如`decoder[26]`) - **核心逻辑**:遍历字符串,查表替换字符 - **代码片段(Python简化版)**: ```python decoder = ['C','S','P','A','B','D',...] # 完整映射表 s = input().strip() result = ''.join(decoder[ord(ch)-ord('A')] for ch in s) # 查表替换 print(result) ``` #### **2. 日期计算题(稳定得分)** - **真题示例**:2014年3月认证第一题 *相反数* - **题目简化**: 给定一组整数,统计互为相反数的数对个数(如`(3, -3)`算一对)。 - **解题要点**: - **数据表示**:用集合(Set)存储绝对值(引用[1]强调STL的重要性) - **核心逻辑**: - 遍历数字,若其绝对值在集合中则计数+1 - 否则将绝对值加入集合 - **代码片段(C++ STL版)**: ```cpp #include <iostream> #include <set> using namespace std; int main() { int n, x, cnt=0; set<int> s; cin >> n; while (n--) { cin >> x; int abs_x = abs(x); if (s.count(abs_x)) cnt++; // 存在相反数 else s.insert(abs_x); } cout << cnt; return 0; } ``` #### **3. 数字统计题(基础模拟)** - **真题示例**:2013年12月认证第一题 *出现次数最多的数* - **题目简化**: 给定n个正整数,输出出现次数最多的最小数(如`[1,2,2,3] → 2`)。 - **解题要点**: - **数据表示**:用数组或字典计数(如`map<int, int>`) - **边界设计**:需考虑多个数出现次数相同的情况 - **优化**:一次遍历同时更新最大频率和最小数字(引用[1]追求逻辑极简) --- ### **三、选择建议** 1. **优先刷题**:2013-2016年认证真题的前两题,难度梯度平缓 2. **语言优势**: - **Python**:字符、集合题更易实现(引用[2]支持Python) - **C++**:熟练使用STL可大幅简化逻辑(引用[1][4]重点强调) 3. **避坑提示**: - 勿忽视输入范围(如数字规模$n \leq 10^4$用暴力法会超时) - 严格验证边界:空输入、重复极值等(引用[1]满分关键) > 真题练习平台:**CCF计算机职业资格认证官网**(引用[1][2]) > 真题库:https://www.cspro.org(历年真题+模拟试题) --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值