您的位置:首页 > 其它

uva 10624(dfs)

2014-08-30 10:24 246 查看
题意:先输入n和m,要求找到一个m位的整数能够让一个数i(n <= i <= m)能够被整数的前i位整除,否则输出-1.

题解:因为要字典序最小的,所以dfs从0到9依次放入计算判断,判断是否能整除可以先自己模拟运算,很容易找到规律。

#include <stdio.h>
#include <string.h>
using namespace std;
const int N = 100;

int val
, n, m, flag;

int judge(int cur) {
int k = 0;
for (int i = 1; i <= cur; i++) {
k = k * 10 + val[i];
k = k % cur;
}
if (!k)
return 1;
else
return 0;
}

void dfs(int cur) {
if (cur > m) {
flag = 1;
return;
}
for (int i = 0; i <= 9; i++) {
if (cur == 1 && i == 0)
continue;
val[cur] = i;
if (cur >= n) {
if (judge(cur))
dfs(cur + 1);
else
continue;
}
else
dfs(cur + 1);
if (flag)
return;
}
}

int main() {
int t, cases = 1;
scanf("%d" ,&t);
while (t--) {
scanf("%d%d", &n, &m);
flag = 0;
dfs(1);
printf("Case %d: ", cases++);
if (flag) {
for (int k = 1; k <= m; k++)
printf("%d", val[k]);
printf("\n");
}
else
printf("-1\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva dfs