编程之美4.10 数字哑谜和回文

<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;
}
    原文作者:维那厮
    原文地址: https://blog.csdn.net/tanwei100/article/details/37839943
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞