找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3889|回復(fù): 0
收起左側(cè)

21位花朵數(shù)求解(C語言版)

[復(fù)制鏈接]
ID:82781 發(fā)表于 2015-6-13 19:51 | 顯示全部樓層 |閱讀模式
花了我一晚上的功夫,哈哈哈哈哈……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");
        }*/
}


回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表