首页 > 代码库 > uva1583(暴力枚举或打表)

uva1583(暴力枚举或打表)

紫书上的代码是打表。

我的做法是暴力枚举。注意,有多个变量时,选择枚举哪一个变量会影响到时间效率,值得考虑。由于各位数字之和最大就是五个9的和为45,所以就枚举各位数字之和比较快。

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<map>#include<set>#include<vector>#include<algorithm>#include<stack>#include<queue>#include<ctype.h>using namespace std;#define INF 1000000000#define eps 1e-8#define pii pair<int,int>#define LL long long int#define MAX 1010int T,n,ans;bool can(int t,int h){    int x=0;    while(t)    {        x+=t%10;        t/=10;    }    return x==h;}int main(){//    freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    scanf("%d",&T);    for(int i=1;i<=T;i++)    {        ans=0;        scanf("%d",&n);        for(int i=1;i<=45;i++)        {            if(n-i<0) break;            else            {                if(can(n-i,i))                    ans=n-i;            }        }        cout<<ans<<endl;    }    //fclose(stdin);    //fclose(stdout);    return 0;}

 

uva1583(暴力枚举或打表)