Una mirada que no es el problema, oh mi rugido. . . . Encontrar una solución a un problema en silencio
encontrado una fórmula mágica:
si m% n = r
es (m * 10 + y)% n == (r * 10 + y)% n
no lo encontrado? Es decir, cuando se agrega un manojo entero de que no tienen una re-adición! ! ! Sin embargo, para utilizar el resto! ! ! Y la precisión se puede decir con seguridad adiós ligeramente bueno
Otro punto a destacar, ya que el resto no se molestan en ir de nuevo ligeramente tan pequeña marca en
BFS rutinas:
1. Inicializar algo, arrojados a la cola
2. La cola está vacía juez
{
tiro fuera de una. . . .
3. La condición juicio final;
4. caminar dirección
5. Analizar el rango
{
factible arrojado. . .
}
}
Código es el siguiente
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <string>
using namespace std;
struct stu{
string s;
int left;
};
void bfs ( int n )
{
int f[205]={0};//表示试过的余数
stu be,nex,kk;
be.s = "1";
be.left = 1%n; f[1%n] = 1; //第一步初始化
queue < stu > q;
q.push(be);
while ( !q.empty())
{
be = q.front();
q.pop();
if( be.left == 0) // 末条件
{
cout<<be.s<<endl;
break;
}
//1
nex.s = be.s + "1";
nex.left = (be.left*10+1) % n;
if ( !f[nex.left] )
{
f[nex.left] = 1;
q.push(nex);
}
//0
nex.s = be.s + "0";
nex.left = (be.left*10+0) % n;
if ( !f[nex.left] )
{
f[nex.left] = 1;
q.push(nex);
}
}
}
int main()
{
int n;
while ( ~scanf("%d",&n) && n)
{
bfs(n);
}
return 0;
}