第一次参加这种有奖励的比赛(没错,我就是为猴子而去的
一年没怎么碰代码果然手生,还是用没写多久的C++,差点全跪了
T1数学奇才琪露诺:
首先定义一个函数F(x),F(x)=x的各个数位上的数字和
然后在区间[l,r]求F(x)k*p+q=x的所有x,按升序输出
T1题解:
枚举x肯定是不行的,F(x)的值只有0到81,我们枚举F(x)的值,然后算出F(x)k*p+q,看数位和是不是符合
可能会爆int,所以要开long long
#include <cstdio> #include <algorithm> #include <vector> #include <set> using namespace std; long long k,p,q,l,r,a[10000],tot; long long s(long long x){ long long ss=0; while(x>0){ ss+=x%10; x=x/10; } return ss; } long long pow(long long x,long long y){ long long ipow=1; long long i; for(i=1;i<=y;++i)ipow=ipow*x; return ipow; } int main(){ scanf("%lld%lld%lld%lld%lld",&k,&p,&q,&l,&r); long long i; tot=0; for(i=0;i<=81;++i){ long long tmp; tmp=pow(i,k)*p+q; if((tmp>=0)&&(s(tmp)==i)&&(tmp>=l)&&(tmp<=r))a[++tot]=tmp; } sort(a+1,a+1+tot); printf("%lld\n",tot); for(i=1;i<=tot;++i)printf("%lld ",a[i]); return 0; }