uva 1583 Digit Generator(Uva-1583)

题目不再写入了,vj:https://vjudge.net/problem/UVA-1583#author=0

主要讲的是找一个数的小于它的一个数,小于它的那个数每一位加起来再加上那个数就会等于原来的数。没有就是0.

这个题实际上感觉也直接暴力for就行。数最大是1e5.那么最多5个9那么就是45,直接用stringstream或者其他的方法进行分位然后寻找就行。

找到就break那么这个数就是最小的。

刘汝佳的做法是直接预处理一个数组然后根据数组找数,实在是感觉非常的高明,同时代码量也比较小。

代码:

#include <iostream>
using namespace std;
#define max 100010
int a[max];
main()
{
for(int i=;i<max;i++)
{
int x=i;int y=i;
while(x) {y+=x%;x/=;}
if(a[y]==||i<a[y]) a[y]=i;
}
int p,b;
cin>>p;
while(p--)
{
cin>>b;
cout<<a[b]<<endl;
}
}

这种思想应该得注意!!!直接预处理。

上一篇:UVa 1583 - Digit Generator 解题报告 - C语言


下一篇:Digit Generator(水)