您的位置:首页 > 其它

生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

2018-03-03 19:26 555 查看
Written by Robert_Wang in Southwest University of Science And Technology.
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小

生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。
分析:对于给定的数n,需要从[1,n-1]去找他的最小元,所以在多次执行时会很耗时,如果我们事先做好[1,100000]
之后用的时候直接当一个函数查就行了。#include<iostream>
#include<algorithm>
#define Max 100001
using namespace std;
int ans[Max];
int main()
{
int i, j;
int n, t;
for (i = 1; i < Max; i++)
{
int x = i, y = i;
while (x>0)
{
y += x % 10;
x /= 10;
}//I是y的元
if (!ans[y] || i < ans[y]) ans[y] = i;//如果y还没有最小生成元或者存在比其更小的生成元,就更新它
}
cin >> t;
while (t--)
{
cin >> n;
cout << n << " 的最小生成元是:" << ans
<< endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: