Codeforces 876C Classroom Watch:列舉

Leohh發表於2017-10-16

題目連結:http://codeforces.com/contest/876/problem/C

題意:

  定義函式:f(x) = x + 十進位制下x各位上的數字之和

  給你f(x)的值(f(x) <= 1e9),讓你輸出所有可能的x值。

 

題解:

  部分列舉。

  考慮可能的x的範圍:

    ∵ x < f(x)

    ∴ 十進位制下x各位上的數字之和 < 9*9 ≈ 100

  所以x列舉[f(x)-100, f(x)]之間的數就好了。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <vector>
 5 
 6 using namespace std;
 7 
 8 int n;
 9 vector<int> v;
10 
11 int main()
12 {
13     cin>>n;
14     for(int i=max(1,n-100);i<n;i++)
15     {
16         int sum=0;
17         int t=i;
18         while(t)
19         {
20             sum+=t%10;
21             t/=10;
22         }
23         if(sum+i==n) v.push_back(i);
24     }
25     cout<<v.size()<<endl;
26     for(int i=0;i<v.size();i++)
27     {
28         cout<<v[i]<<endl;
29     }
30 }