找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3938|回复: 0
打印 上一主题 下一主题
收起左侧

21位花朵数求解(C语言版)

[复制链接]
跳转到指定楼层
楼主
ID:82781 发表于 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");
        }*/
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表