easy problm(另類列舉)
阿新 • • 發佈:2019-01-01
思路:自己想的時候沒想到。。。還是做題少了,拿到這題的時候沒有什麼思路。。。
其實就是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; }