这道题主要就是了解生成元的意思,那么很容易想到直接求,但是可以优化成为一个查表的问题。。就好像今年noip的D2T1(虽然我只水了个暴力分)
枚举100000以内的生成元,查表,输入就可以了,
PS:注意数组all代表的意思
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int all[100000+10],n,tmp;
int main()
{
memset(all,0,sizeof(all));
for(int i = 0;i<=100000;i++)
{
int x = i,y = i;
while(x>0) {y+=x%10; x/=10;}
if(all[y] == 0||i < all[y]) all[y] = i;
}
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>tmp;
cout<<all[tmp]<<endl;
}
return 0;
}