算法竞赛入门经典-例题3-5 生成元
程序员文章站
2024-03-18 23:26:40
...
题目:
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小
生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。
心得:
1、数据很大,需要使用打表。
2、学会了一种对数组进行初始化的新方式:memset(n,int a,sizeof(n))《包含在头文件string.h里》可以最快速地对数组进行初始化。
代码:
#include <iostream>
#include <cstring>
using namespace std;
#define maxn 100005
int ans[maxn];
int main()
{
int num;
cin >> num;
memset(ans,0,sizeof(ans));
for(int i = 1;i < maxn;i++)
{
int x = i,y = i;
while(x > 0)
{
y += x % 10;
x /= 10;
}
if(ans[y] == 0||i < ans[y])
{
ans[y] = i;
}
}
cout << ans[num] << endl;
return 0;
}