当前位置: 代码迷 >> 综合 >> UVA 1583 Digit Generator(最小生成元+打表)
  详细解决方案

UVA 1583 Digit Generator(最小生成元+打表)

热度:93   发布时间:2023-12-23 00:26:24.0

 题目链接:http://https://cn.vjudge.net/problem/UVA-1583

 

 【题解】 题意是给你一个数m,让你找出一个数x,x加上x的各个数字之和等于这个数m,并且x要尽量小。

  普遍的解法就是每给一个数m,从1到m-1遍历查找使得 i 加上各个数字之和等于m就输出,但是这也明显会TLE,因为范围是1E5,所以就要考虑优化,  因为没次找一个数都有遍历,所以我们可以考虑打表,把1e5的数都打出来,最后直接查表。 

 【AC代码】

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int m,n;
int ans[100005];int main()
{memset(ans,0,sizeof(ans));for(int i=0;i<100005;i++){int sum=i,x=i;while(x){sum+=x%10;x/=10;}if(ans[sum]==0 || i<ans[sum]) ans[sum]=i;}while(~scanf("%d",&m)){while(m--){scanf("%d",&n);printf("%d\n",ans[n]);}}return 0;
}

  相关解决方案