数学题
description |
|
input |
|
output |
|
sample_input |
|
sample_output
此题是典型的枚举,不过这题还有个逆向思维在里面,如果想不到逆向求解这题从0到10^9遍历是完全不可能做到ac的,所以逆向思考,s(x)最大值为81,那么直接遍历s(x)就搞定啦,只不过刚开始不是太容易想,恰好将s(x)带入的值算出来之后可以得到对应的x,然后只需验证x是否正确就ko啦!下面附上代码仅供参考:
#include <iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
int f[10000]={0};
int m=0;
for(int i=1;i<=81;i++)
{
long long cf=1;
for(int j=0;j<a;j++)
cf*=i;
long long x=cf*b+c,s=x;
int n=0;
while(x)
{
n+=(x%10);
x/=10;
}
if(n==i&&s>0&&s<1000000000)
{
f[m]=s;
m++;
}
}
if(m==0)
cout<<0<<endl;
else
{
sort(f,f+m);
cout<<m<<endl;
for(int i=0;i<m;i++)
cout<<f[i]<<' ';
cout<<endl;
}
}
return 0;
}
|
持续更新博客地址:
blog.csdn.net/martinue

浙公网安备 33010602011771号