UVA 10624 Super Number

 

DFS练习,2932ms险过。

CODE:

 

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using  namespace std;

int digit[ 31], save[ 31];
int beg, end;
int flag;

int check( int *digit,  int m)
{
     int ans =  0;
     for( int i =  1; i <= m; i++)
        ans = (ans* 10 + digit[i]) % m;
     if(!ans)  return  1;
         return  0;
}

void dfs( int *digit,  int m)
{
     if(m > end)
    {
        flag =  1;
        memcpy(save, digit,  sizeof(save));
         return ;
    }
     for( int i =  0; i <=  9 && !flag; i++)
    {
        digit[m] = i;
         if(digit[ 1] !=  0)
        {
             if((check(digit, m) && m >= beg) || m < beg)     // 顺序由小到大。 
            {
                dfs(digit, m+ 1);
            }
        }
    }
}


int main()
{
     int T, times =  0;
    scanf( " %d ", &T);
     while(T--)
    {
        flag =  0;
        memset(digit,  0sizeof(digit));
        scanf( " %d%d ", &beg, &end);
        dfs(digit,  1);
        printf( " Case %d:  ", ++times);
         if(!flag) printf( " -1\n ");
         else
        {
             for( int i =  1; i <= end; i++)
                printf( " %d ", save[i]);
            printf( " \n ");
        }
    }
     return  0;
}

 

 

 

你可能感兴趣的:(number)