|
花了我一晚上的功夫,哈哈哈哈哈……22秒出解!
#include<stdio.h>
//#include<time.h>
int shuixianhua[21];
int cifang21[10][21]={};
int chuzhi[10];
int jieguo[10];
void shuixianhuashu(int n,int x)
{
if(x>10)
return;
if(x==10&&n==21)
{
for(int i=0;i<21;i++)
shuixianhua[i]=0;
for(int i=0;i<=9;i++)
for(int j=0;j<21;j++)
shuixianhua[j]+=cifang21[i][j]*chuzhi[i];
for(int i=0;i<20;i++)
{
shuixianhua[i+1]+=shuixianhua[i]/10;
shuixianhua[i]=shuixianhua[i]%10;
}
if(shuixianhua[20]>0&&shuixianhua[20]<10)
{
for(int i=0;i<10;i++)
jieguo[i]=0;
for(int i=0;i<=9;i++)
{
for(int j=0;j<21;j++)
{
if(shuixianhua[j]==i)
jieguo[i]++;
}
}
}
else
return;
for(int i=0;i<=9;i++)
if(jieguo[i]!=chuzhi[i])
{//printf("%d,%d\n",jieguo[i],chuzhi[i]);
return;}
for(int i=20;i>=0;i--)
{
printf("%d",shuixianhua[i]);
}
printf("\n");
}
else
{
for(int i=0;i<=21;i++)
{
int cache;
chuzhi[x]=i;
cache=n+i;
if(cache>21) return;
shuixianhuashu(cache,x+1);
}
}
}
int main()
{
int i,j,k;
for(i=1;i<=9;i++)
cifang21[i][0]=i;
for(i=2;i<=9;i++)
{
for(j=0;j<20;j++)
{
for(k=0;k<21;k++)
{
cifang21[i][k]*=i;
}
for(k=0;k<21;k++)
{
cifang21[i][k+1]+=cifang21[i][k]/10;
cifang21[i][k]=cifang21[i][k]%10;
}
}
}
shuixianhuashu(0,0);
//printf("%lf\n",(double)clock()/CLOCKS_PER_SEC);
/*
for(i=1;i<=9;i++)
{
for(j=20;j>=0;j--)
printf("%d",cifang21[i][j]);
printf("\n");
}*/
}
|
|