永发信息网

花朵数:一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。 例

答案:2  悬赏:40  手机版
解决时间 2021-02-25 00:50
花朵数:一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。 例
最佳答案
简单说一下做法,把0~9的21次方都计算出来,存在数组里,然后开始枚举这个21位数中0~9各有多少个,并把和求出来,然后看和中0~9的个数是否与枚举的个数相等,相等则符合要求并存下来,最后把所有符合要求的数排个序即可,时间复杂度C(30,9)*(10+1)*21=3*e9,3分钟之内能出结果。

=====================2015年5月20日补充=====================
#include

#define N 21
#define base 10000000

int powerN[10][3];
int ans=0;
int Armstrong_number[90][3];
int cnt[10];

void calc_powerN()
{
int i, j, k;
for (i=0; i<10; i++)
{
powerN[i][2]=powerN[i][1]=0;
powerN[i][0]=1;
for (j=0; j for (k=2; k>=0; k--)
{
powerN[i][k]*=i;
if (powerN[i][k]>base)
{
powerN[i][k+1]+=powerN[i][k]/base;
powerN[i][k]%=base;
}
}
}
}

int check()
{
int i, j, sum[3]={0, 0, 0}, c[10];
for (i=0; i<10; ++i) c[i]=cnt[i];
for (i=0; i<10; i++)
for (j=0; j<3; j++)
sum[j]+=powerN[i][j]*cnt[i];
for (j=0; j<2; j++)
{
sum[j+1]+=sum[j]/base;
sum[j]%=base;
}
if (sum[2]<1000000) return 1;
for (j=0; j<3; j++)
Armstrong_number[ans][j]=sum[j];
for (i=0; i<7; i++)
for (j=0; j<3; j++)
{
if (!c[sum[j]%10]) return 0;
c[sum[j]%10]--;
sum[j]/=10;
}
ans++;
return 0;
}

int dfs(int deep, int rest)
{
if (deep==0)
{
cnt[deep]=rest;
if (check()) return 1;
return;
}
int i;
for (i=rest; i>=0; i--)
{
cnt[deep]=i;
if (dfs(deep-1, rest-i)) return 1;
}
return 0;
}

int Compare(int i, int j)
{
int k;
for (k=2; k>=0; k--)
{
if (Armstrong_number[i][k] if (Armstrong_number[i][k]>Armstrong_number[j][k]) return 1;
}
return 0;
}

void Swap(int i, int j)
{
int k;
for (k=0; k<3; k++)
{
int tmp;
tmp=Armstrong_number[i][k];
Armstrong_number[i][k]=Armstrong_number[j][k];
Armstrong_number[j][k]=tmp;
}
}

void Sort()
{
int i, j;
for (i=0; i for (j=i+1; j if (Compare(i, j)>0) Swap(i, j);
}

void print()
{
int i;
for (i=0; i printf("%d%07d%07d\n", Armstrong_number[i][2], Armstrong_number[i][1], Armstrong_number[i][0]);
}

int main()
{
calc_powerN();
dfs(9, N);
Sort();
print();
return 0;
}
全部回答
#include
#include
#include
#include
#include
void mc(int*b,int *a);
void f(int *s,int n);
void g(int *f,int *a);
int main()
{
int k=0;
int f1[10][21];
memset(f1,0,sizeof(f1));
int f2[10][21];
memset(f2,0,sizeof(f2));
int a[10],b[10];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int h[21];
memset(h,0,sizeof(h));
int y[21]={-1};
bool th =true;
for(int i=0;i<10;i++)
{
f1[i][0]=i;
f(f1[i],21);
}
clock_t begin_time, end_time;
begin_time= clock();
for( a[0]=0;a[0]<21;a[0]++)
for( a[1]=0;a[1]<21-a[0];a[1]++)
for( a[2]=0;a[2]<21-a[0]-a[1];a[2]++)
for( a[3]=0;a[3]<21-a[2]-a[0]-a[1];a[3]++)
for( a[4]=0;a[4]<21-a[3]-a[2]-a[1]-a[0];a[4]++)
for( a[5]=0;a[5]<21-a[4]-a[3]-a[2]-a[1]-a[0];a[5]++)
for( a[6]=0;a[6]<21-a[5]-a[4]-a[3]-a[2]-a[1]-a[0];a[6]++)
for( a[7]=0;a[7]<21-a[6]-a[5]-a[4]-a[3]-a[2]-a[1]-a[0];a[7]++)
for( a[8]=0;a[8]<21-a[7]-a[6]-a[5]-a[4]-a[3]-a[2]-a[1]-a[0];a[8]++)
{
a[9]=21-a[0]-a[1]-a[2]-a[3]-a[4]-a[5]-a[6]-a[7]-a[8];
if(a[9]<=0||a[9]>9)continue;
int gh;

for(int i=0;i<10;i++)
{
gh=0;
for(int j=0;j<21;j++)
{
int t=f1[i][j]*a[i]+gh;
f2[i][j]=t%10;
gh=t/10;
}
}
for(i=0;i<10;i++)
{
g(f2[i],h);
}
mc(b,h);
for(i=0;i<10;i++)
{
if(b[i]!=a[i])
{
th =false;
break;
}
}
if(th ==true)
{

for(i=20;i>=0;i--)
cout< cout< }
th =true;
memset(b,0,sizeof(b));
memset(h,0,sizeof(h));
memset(f2,0,sizeof(f2));
}
end_time = clock();
printf("\nTime elapsed:%.3lf (ms)\n",(double)(end_time-begin_time));
return 0;
}
void mc(int*b,int *a)
{
for(int i=0;i<21;i++)
{
int n=a[i];
switch(n)
{
case 0:b[0]++;break;
case 1:b[1]++;break;
case 2:b[2]++;break;
case 3:b[3]++;break;
case 4:b[4]++;break;
case 5:b[5]++;break;
case 6:b[6]++;break;
case 7:b[7]++;break;
case 8:b[8]++;break;
case 9:b[9]++;break;
}
}
}
void f(int *s,int n)
{ int c=fabs(s[0]),h=0;
for(int i=0;i<20;i++)
{ h=0;

for(int j=0;j<21;j++)
{
int t=fabs(s[j])*c+h;
s[j]=t%10;
h=t/10;
}
}
}
void g(int *f,int *a)
{
int c=0;
for(int i=0;i<21;i++)
{
int t=f[i]+a[i]+c;
a[i]=t%10;
c=t/10;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在网吧下(色)电影 会被网管主机监控到吗
江西省洪城监狱在什么地点,怎样乘公交车去
【新型外墙保温板】新型聚苯板外墙外保温的特
壁挂炉采暖怎么样?每天采暖的费用大概是多少
关于高护的知识?
求鉴定NIKE air Tech Challenge2
淘宝退货还要卖家确定我才可以收到退款吗
德州有卖哈士奇的么?? 这一年我在德州至看
蒙古园酒店地址有知道的么?有点事想过去
读澳大利亚图,回答下列各题。【小题1】关于
90个二字词语
惠州市惠城区芦洲镇少儿活动中心地址有知道的
梦幻诛仙2蛙腿在哪买,烹饪配方材料
如何隐藏或显示REAL注释项
如何管理餐饮店
推荐资讯
降钙素原1.68算很高吗
【唯心不易】为刀百辟唯心不易这句话出自哪儿
乌龟多长时间才能熟悉环境
vivo e1手机的系统能升级到什么版本?
城镇集体供暖的时间是多久?
冠军汽修:汽车机油到底用5W30还是5W40的好
长城哈弗几年审一次
移动电话卡可以异地补办吗
环宇撸串吧我想知道这个在什么地方
亲子坊孕婴会所怎么去啊,有知道地址的么
迁安市大五里乡成人学校我想知道这个在什么地
香槟城地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?