1 条题解

  • 0
    @ 2024-8-12 19:28:57

    简单模拟即可。

    • 考虑 n=1n=1 直接不用变
    • 考虑 n=2n=211
    • 考虑 n=3n=322

    之后的 nn 我们要想办法把它变到 22 或者 33,然后就可以一步到位了。

    考虑 n>3n\gt3 并且 nn 是偶数,我们可以找到他的一个因数 22,那么我们可以一步变到 22,剩下再减 11就行了。

    考虑 n>3n\gt3 并且 nn 是奇数,我们想想他能变为 2,32,3 的可能情况:

    • 只要是 33 的倍数,我们直接变为 33,再减 22
    • 不是 33 的倍数,它就是一个奇数,那么我们先给它减 11 就变成偶数了,所以就是偶数的那种情况啦。

    时间复杂度 O(1)O(1)

    #include <bits/stdc++.h>
    
    using u32 = unsigned;
    using i64 = long long;
    using u64 = unsigned long long;
    using i128 = __int128;
    
    void solve() {
    	int n;
    	std::cin >> n;
    	if (n == 1) {
    		std::cout << 0 << '\n';
    	} else if (n <= 3) {
    		std::cout << 1 << '\n';
    	} else {
    		if (n % 2 == 0) {
    			std::cout << 2 << '\n';
    		} else {
    			if (n % 3 == 0) {
    				std::cout << 2 << '\n';
    			} else {
    				std::cout << 3 << '\n';
    			}
    		}
    	}
    }
    
    int main() {
    	std::ios::sync_with_stdio(false);
    	std::cin.tie(nullptr);
    
    	int t; 
    	std::cin >> t;
    	while (t --) {
    		solve();
    	}
    
    	return 0;
    }
    
    • 1

    信息

    ID
    49
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    86
    已通过
    18
    上传者