Bookmark and Share

free counters
Back to the Training Home

Lesson: 37
Problem: 2502
Title: Digit Generator
Difficulty Level: 2.0
Date: MAR 02, 2009
Site: http://acm.tju.edu.cn/toj/showp2502.html

Very close to problem 1730, see Lesson 26

Solution:

#include<stdio.h>

#define maxn 1000001
int Gen[maxn];
int digitSum[maxn];

int sumOfDigits(int n) {
	int sum = 0;
	while(n) {
		sum += n%10;
		n /= 10;
	}
	return sum;
}

void setDigitSum() {
	int i;
	for(i = 1; i<maxn; i++) 
		digitSum[i] = sumOfDigits(i);
}


void setGenerator() {
	int i, k;
	setDigitSum();
	for(i = 1; i<maxn; i++) {
		k =  i + digitSum[i];
		if(k >= maxn) continue;
		if(Gen[k] == 0 || Gen[k] > i) {
			Gen[k] = i;
		}
	}

}

int main() {
	int kase, n;
	setGenerator();
	scanf("%d",&kase);
	while(kase--) {
		scanf("%d",&n);
		printf("%d\n",Gen[n]);
	}
	
	return 0;
}
Back to the Training Home