1. 程式人生 > >easy problm(另類列舉)

easy problm(另類列舉)

在這裡插入圖片描述

思路:自己想的時候沒想到。。。還是做題少了,拿到這題的時候沒有什麼思路。。。
其實就是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; //求各個位的和 int ansl = m; //儲存一下m while(m) { ans += m%10; m /= 10; //一開始寫成左移了,應該是除以10的; } if(ans == i)
{ cout << ansl << endl; flag = 1; break; } } if(!flag) cout << 0 << endl; } return 0; }

打個表即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

int a[1000005];
void init()
{
    for(int i=1;i<=1000005;i++)
    {
        int sum=i,t=i;
        while(t)
        {
            sum+=t%10;
            t/=10;
        }
        if(sum<1000005&&a[sum]==0)
        {
            a[sum]=i;
        }
        if(sum>1000005)
        {
            break;
        }
    }
}

int main()
{
    int n;
    init();
    while(scanf("%d",&n)!=EOF)
    {
        printf("%d\n",a[n]);
    }
    return 0;
}