輸入Y,求出Y的最小生成元,
生成元定義為X+X的各個位數數字的和,
例如:Y=216,X=207,198
因為207+2+0+7=216,198+1+9+8=216,
題目要最小的,所以取198為答案。
題解:
如果直接一個一個找小於Y的所有生成元會超時,
這一題可以建表,再直接輸出所求即可。
table[y]=x; 意即 y的生成元為x
^0 ^ /
/* 20150728
* hanting
* UVa 1583 - Digit Generator
* C++
*/
#include <iostream>
using namespace std;
const int MAXN=99999+9*5;
inline int Generate(int &n)
{
return n+n%10+n/10%10+n/100%10+n/1000%10+n/10000%10;
}
int main()
{
/*Build Table*/
int table[MAXN]={0};
for(int i=100000;i>=0;i--)//倒著回來可得min
{
table[Generate(i)]=i;
}
int N;
cin>>N;
while(N--)
{
int num;
cin>>num;
cout<<table[num]<<endl;
}
return 0;
}
沒有留言:
張貼留言