QDU easy problem(另类枚举)

来源:互联网 发布:nginx加lua模块 编辑:程序博客网 时间:2024/06/07 22:05

给你一个数字N,N的范围是1~1000000,求一个最小的正整数M,这个数字M的各个位的数字加上它本身之和恰好为N。当然,如果没有解,输出0。

输入数据由多组数据组成,每行由一个数字N组成(1<=N<=1000000)。

对于每组数据,输出仅一行包含一个整数M。如果对于每个N,存在最小的M,则输出这个最小值。如果不存在这个最小的M,则输出0。

 复制
216 121 2005
19801979

思路:学长一点就豁然开朗,自己想的时候没想到。。。还是做题少了,拿到这题的时候没有什么思路。。。
其实就是n范围是1- 1e6,每个位数相加最大也就是54(999999),从54开始枚举就好了。。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){    int n;    while(~scanf("%d",&n))    {        int flag = 0;        for(int i = 54; i > 0; i--)        {            int m = n - i;            if(m <= 0)  continue;            int ans = 0, ansl = m;            while(m)            {                ans += m%10;                m /= 10;   //一开始写成左移了,应该是除以10的;            }            if(ans == i)            {                cout << ansl << endl;                flag = 1;              //  cout << ans << endl;                break;            }        }        if(!flag)  cout << 0 << endl;    }    return 0;}



1 0
原创粉丝点击