1 条题解

  • 0
    @ 2026-6-19 10:30:12

    📝 题目大意

    给定公历年份 YY(当前为 11 月),求下一次满足"年份除以 4422"的年份。若 YY 本身已满足条件,则答案为 YY

    💡 解题思路

    1. 题目分析:约束 2000Y30002000 \leq Y \leq 3000,范围极小,暴力枚举也完全可行。但观察余数规律可以 O(1)O(1) 直接计算。
    2. 算法推导
      • Ymod4=2Y \bmod 4 = 2,今年就是答案,输出 YY
      • Ymod4=1Y \bmod 4 = 1,下一年余数为 22,输出 Y+1Y + 1
      • Ymod4=0Y \bmod 4 = 0,两年后余数为 220120 \to 1 \to 2),输出 Y+2Y + 2
      • Ymod4=3Y \bmod 4 = 3,三年后余数为 2230123 \to 0 \to 1 \to 2),输出 Y+3Y + 3
    3. 边界与细节:由于 YY 范围小且必然有解(循环周期为 44),无需考虑越界。注意题目要求是"下一次",当前年满足条件时直接输出当前年即可。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅做常数次取模运算和比较。
    • 空间复杂度O(1)O(1),仅使用几个变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n;
    	cin >> n;
    	// 余数为 2:今年正好满足条件
    	if(n % 4 == 2){
    		cout << n;
    		return 0;
    	}
    	// 余数为 3:还需等待 3 年(3→0→1→2)
    	if(n % 4 == 3){
    		cout << n + 3;
    		return 0;
    	}
    	// 余数为 1:下一年即满足(1→2)
    	if(n % 4 == 1){
    		cout << n + 1;
    		return 0;
    	}
    	// 余数为 0:还需等待 2 年(0→1→2)
    	if(n % 4 == 0){
    		cout << n + 2;
    		return 0;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    615
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者