codeforces #262 DIV2 B题 Little Dima and Equation
题目地址:http://codeforces.com/contest/460/problem/B
这题乍一看没思路。可是细致分析下会发现,s(x)是一个从1到81的数,不管x是多少。所以能够枚举1到81,这样就转化成了一个一元一次方程。直接求解x就能够了。这时候还要推断x是否在1到10^9之间,而且它的各位数之和是s(x)。
这题脑残了两次。。
。
第一次是写成了<=10^9。。然后发现错误后,就又改了回来。
。可是发现10^9是不可能的,。
。。。
代码例如以下:
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <algorithm> #include <queue> using namespace std; #define LL __int64 LL aa[100]; int main() { LL n, a, b, c, ans=0, i, y, zz, j; LL x, z; scanf("%I64d%I64d%I64d",&a,&b,&c); for(i=1;i<=81;i++) { zz=1; for(j=1;j<=a;j++) zz*=i; x=zz*b+c; y=0; z=x; while(z) { y+=z%10; z/=10; } if(y==i&&x>=1&&x<1e9) { aa[ans++]=x; } } printf("%I64d\n",ans); for(i=0;i<ans;i++) { printf("%I64d ",aa[i]); } return 0; }