在搜索专题里做到这题的,,没感觉是搜索。
题目关键: 1.第一个城市无条件断网
2.要让第二个城市最后断电
#include <stdio.h>
#include <string.h>
bool find(int, int);
int main()
{
int n;
while (scanf("%d", &n) && n) {
for (int i = 2; ; i++) {
if (find(i, n)) {
printf("%d\n", i);
break;
}
}
}
return 0;
}
bool find(int m, int n)
{
bool cut[n];
int nocut = n - 1;
memset(cut, false, sizeof(cut));
cut[0] = true; //第一个城市无条件先断网
int read_num = 1;
for (int i = 0; i < n; i++) {
//出口
if (nocut == 1 && cut[1] == false) {
return true;
}
if (nocut == 1) {
break;
}
if (!cut[i]) { //如果未被断网
if (read_num % m == 0) {
cut[i] = true;
nocut--;
}
read_num++;
}
if (i == n - 1) { //实现循环读数
i = -1; //for循环尾部隐含一个i++
}
}
return false;
}