第一次参加这种有奖励的比赛(没错,我就是为猴子而去的

一年没怎么碰代码果然手生,还是用没写多久的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;
}
T1

相关文章: