您的位置:首页 > 其它

UVA 10624 Super Number

2012-09-25 20:58 369 查看
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, 0, sizeof(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: