[規律]Snuke Numbers
阿新 • • 發佈:2018-11-29
題目描述
Let S(n) denote the sum of the digits in the decimal notation of n. For example, S(123)=1+2+3=6.We will call an integer n a Snuke number when, for all positive integers m such that m>n, holds.
Given an integer K, list the K smallest Snuke numbers.
Constraints
1≤K
The K-th smallest Snuke number is not greater than 1015.
輸入
Input is given from Standard Input in the following format:K
輸出
Print K lines. The i-th line should contain the i-th smallest Snuke number.
樣例輸入
10
樣例輸出
1
2
3
4
5
6
7
8
9
19
思路:找到規律如下:
即只需在加到9時判斷下一次是加第一位還是第二位
AC程式碼:
#include <iostream> #include<cstdio> typedef long long ll; using namespace std; double f(ll x){ ll sum=0; ll cop=x; while(x){ sum+=x%10; x/=10; } return cop*1.0/(sum*1.0); } int main() { //printf("%.6f %.6f\n",f(20999),f(21999)); ll k;scanf("%lld",&k); ll tot=0; ll now=0,x=1; while(tot<k){ if((now/x)%10!=9){ now+=x; printf("%lld\n",now);tot++; } else{ if(f(now+x)>f(now+10*x)){ x=10*x; } now+=x; printf("%lld\n",now);tot++; } //printf("tot=%lld \n",tot); } return 0; }