LuoguP6723 [COCI2015-2016#5] ZAMKA 題解
阿新 • • 發佈:2021-12-23
LuoguP6723 [COCI2015-2016#5] ZAMKA 題解
Content
給定三個數 \(L,D,X\) ,求在 \([L,D]\) 內各數位的和恰好為 \(X\) 的最小數 \(N\) 和最大數 \(M\) (保證 \(N,M\) 一定存在)。
資料範圍:\(1\leqslant L \leqslant D \leqslant 10^4,1 \leqslant x \leqslant 36\)。
Solution
很簡單的一道模擬題。
先預處理出 \(1\) 到 \(10^4\) 的各數位之和,然後先從左往右遍歷,第一個找到的數即為最小的滿足要求的數。在從右往左遍歷,第一個找到的數即為最大的滿足要求的數(證明無需多講)。
主要是先預處理這裡降低一下複雜度,其他的都沒什麼好講的。
Code
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> using namespace std; int sum[10007]; int main() { for(int i = 1; i <= 10000; ++i) { int p = i; while(p) { sum[i] += p % 10; p /= 10; } } int l, d, x; scanf("%d%d%d", &l, &d, &x); for(int i = l; i <= d; ++i) { if(sum[i] == x) { printf("%d\n", i); break; } } for(int i = d; i >= l; --i) { if(sum[i] == x) { printf("%d\n", i); break; } } return 0; }