Back to the Training Home
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;
}
|