1. 程式人生 > 其它 >LuoguP6723 [COCI2015-2016#5] ZAMKA 題解

LuoguP6723 [COCI2015-2016#5] ZAMKA 題解

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;
}