地址:
http://acm.hit.edu.cn/judge/show.php?Proid=1018思路:主要是利用BFS原理,先對給定的數(shù)(0~9)排序,然后利用這些數(shù)不斷構(gòu)造整數(shù)(該整數(shù)可以很大很大,需要用char型數(shù)組保存),先是1位數(shù),然后是2位數(shù)、3位數(shù)……直到找到n的最小倍數(shù)或者構(gòu)造無法繼續(xù)為止。建立一個char型二維數(shù)組保存構(gòu)造的整數(shù)來模仿隊列機(jī)制(如果直接使用隊列保存構(gòu)造的整數(shù),頻繁地對char型數(shù)組push和front將會導(dǎo)致超時),一個隊列保存構(gòu)造的整數(shù)對n求余的結(jié)果(與前者同步),一個bool型數(shù)組作為余數(shù)是否重復(fù)的標(biāo)識,如果余數(shù)重復(fù)將不保存該構(gòu)造的整數(shù)及其相應(yīng)余數(shù)。注意當(dāng)n為0時不需構(gòu)造,直接輸出0即可。
代碼:
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <memory.h>
#include <string.h>

#define MAX_ROW 5000
#define MAX_COL 5000

using namespace std;

char data[MAX_ROW][MAX_COL];

int main()


{
int n, m;
int i;
int digits[10];
int pre, now;
queue<int> residue;
bool flag[5000], done;
int tmp1, tmp2, leng;
int num;
while(scanf("%d%d", &n, &m) == 2)

{
if(n == 0)

{
printf("0\n");
continue;
}

for(i = 0; i < m; i++)

{
scanf("%d", &(digits[i]));
}

done = false;
num = 0;
pre = now = 0;
sort(digits, digits + m);
memset(flag, 0, sizeof(flag));
while(residue.size() > 0)

{
residue.pop();
}
residue.push(0);

while(done == false && residue.size() > 0)

{
num++;
tmp1 = residue.front();
residue.pop();
for(i = 0; i < m; i++)

{
if(num == 1)

{
if(digits[i] != 0)

{
tmp2 = digits[i] % n;
data[now][0] = digits[i] + '0';
data[now][1] = '\0';
if(tmp2 == 0)

{
printf("%s\n", data[now]);
done = true;
break;
}
else if(flag[tmp2] == false)

{
flag[tmp2] = true;
now = (now + 1) % MAX_ROW;
residue.push(tmp2);
}
}
}
else

{
tmp2 = (tmp1 * 10 + digits[i]) % n;
strcpy(data[now], data[pre]);
leng = strlen(data[now]);
data[now][leng] = digits[i] + '0';
data[now][leng + 1] = '\0';
if(tmp2 == 0)

{
printf("%s\n", data[now]);
done = true;
break;
}
else if(flag[tmp2] == false)

{
flag[tmp2] = true;
now = (now + 1) % MAX_ROW;
residue.push(tmp2);
}
}
}

if(num != 1)
pre = (pre + 1) % MAX_ROW;
}
if(done == false)

{
printf("0\n");
}
}

return 0;
}
在編程時遇到二維數(shù)組data[MAX_ROW][MAX_COL]設(shè)置過大導(dǎo)致Runtime Error的問題,查閱資料后得知是因為局部變量占用棧空間,導(dǎo)致棧空間不足。
解決辦法如下:
(1) 將局部變量改為全局變量
(2) 使用new或者malloc在堆上申請空間
(3) 在設(shè)置中提高運行棧的大小(project->settings->link->category,選擇output->reserve中設(shè)定棧大小,最小4Byte)