您的位置:首页 > 其它

uva 10624 Super Number 险险的过了。。。

2013-07-24 00:29 411 查看

uva 10624 Super Number 

题意: 给定n, m要求出一个超基数, 这个数的第i位(i在[n,m]之间) 之前所组成的数字,要能被i整除。。求出满足条件最小的超基数,如果找不到就输出-1。。

DFS 回溯。。。由于最多有30位。。就用数组来存了。。 导致要多取余好几次。限制3秒。卡2秒6过了。。- -

#include <stdio.h>
#include <string.h>

int n, m;
int a[50];
int t, tt;
int judge;

int mu(int n)
{
int i;
int s =0;
for (i = 0; i < n; i ++)
{
s = (s * 10 + a[i]) % n;
}
if (s == 0)
return 1;
else
return 0;
}
void dfs(int wei)
{
int i;
if (wei == m)
{
judge = 1;
return;
}
for (i = 0; i <= 9; i ++)
{
if (wei == 0 && i == 0)
continue;
a[wei] = i;
if (mu(wei + 1) || wei + 1 < n)
{
dfs(wei + 1);
if (judge == 1)
return;
}
}
}
int main()
{
scanf("%d", &t);
for (tt = 1; tt <= t; tt ++)
{
int i;
judge = 0;
memset(a, -1, sizeof(a));
scanf("%d%d", &n, &m);
dfs(0);
if (!judge)
printf("Case %d: -1\n", tt);
else
{
printf("Case %d: ", tt);
for (i = 0; i < m; i ++)
printf("%d", a[i]);
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: