您的位置:首页 > 其它

u725子集生成

2017-02-19 01:11 92 查看
一开始用全排列做了,然后超时,然后看了网上的,取巧的感觉,不太明白子集生成什么情况

自己的:

//

//  main.cpp

//  u725

//

//  Created by Mr.Xue on 17/2/18.

//  Copyright © 2017年 Mr.Xue. All rights reserved.

//

#include <iostream>

#include <string.h>

#include <stdio.h>

using namespace
std;

int a[12],iend,b[12],n,fl;

int jisuan()

{

    int m=b[6],c=b[1],d=1;

    for(int i=2;i<6;i++)

    {

        d=d*10;

        m=m+b[i+5]*d;

        c=c+b[i]*d;

    }

    if(n>60000)

    {

        fl=1;

        return
0;

    }

    if(n*c==m)

    {

        printf("%d%d%d%d%d / %d%d%d%d%d = %d\n",b[10],b[9],b[8],b[7],b[6],b[5],b[4],b[3],b[2],b[1],n);

        return
1;

    }

        

    else

        return
0;

}

void quanpailie_DFS(int j)

{

    if(fl==1)

        return;

    if(j>10)

    {

        if(jisuan()==1)

            iend=1;

        return;

    }

    for(int i=0;i<10;i++)

    {

        if(a[i]==0)

        {

            b[j]=i;

            a[i]=1;

            quanpailie_DFS(j+1);

            a[i]=0;

        }

    }

}

int main()

{

    while(scanf("%d",&n)&&n!=0)

    {

        memset(a,0,sizeof(a));

        iend=0;

        fl=0;

        quanpailie_DFS(1);

        if(iend==0)

            printf("no soluation\n");

        cout <<
"\n";

    }

    

    return
0;

}

网上的

#include <iostream>

#include <cstdlib>

#include <cstdio>

using namespace
std;

int used[10];

int judge( int a,
int b )

{

    if ( b >
98765 )

        return
0;

    for (
int i = 0 ; i <
10 ; ++ i )

        used[i] =
0;

    if ( a <
10000 )

        used[0] =
1;

    while ( a )

    {

        used[a%10] =
1;

        a /= 10;

    }

    while ( b )

    {

        used[b%10] =
1;

        b /= 10;

    }

    int sum =
0;

    for (
int i = 0 ; i <
10 ; ++ i )

        sum += used[i];

    return (sum ==
10);

}

int main()

{

    int n, T =
0;

    while (
~scanf("%d",&n) && n ) {

        if ( T ++ )
printf("\n");

        int count =
0;

        for (
int i = 1234 ; i <
100000 ; ++ i ) {

            if (
judge( i, i*n ) ) {

                printf("%05d / %05d = %d\n",i*n,i,n);

                count ++;

            }

        }

        if ( !count )

            printf("There are no solutions for %d.\n",n);

    }

    return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: