<pre name="code" class="cpp">//回溯算法
int FindTheNumber()
{
int solution[10];
memset(solution, 0, 10*sizeof(int));
bool used[10];
memset(used,false,10*sizeof(bool));
int num = 0;
int k = 1;
while(k >= 1)
{
if(solution[k] != 0)
{
num -= solution[k];
num /= 10;
used[solution[k]] = false;
}
int i;
for(i = solution[k] + 1; i <= 9; i++) //为位置k找一个合适的数
{
if(!used[i] && (num * 10 + i) % k == 0) break;
}
if(i == 10) //找不到则回溯到上一个位置
{
solution[k] = 0;
k--;
}
else
{
solution[k] = i;
used[solution[k]] = true;
num *= 10;
num += solution[k];
if(k == 9) //找到符合条件的数了,直接返回
return num;
else //转到下一个位置
k++;
}
}
return 0;
}
编程之美4.10 数字哑谜和回文
最新推荐文章于 2024-05-24 10:35:33 发布