农场周围的道路-学习记录
这题的关键在于知道每次分组后,分成的两组羊群的数量分别为(N+K)/2和(N-K)/2
因此可以用递归实现。
自己写的代码如下:
#include <iostream>
using namespace std;
int num = 1;
//农场周围的道路
int function(int N, int K)
{
if ((N - K) % 2 != 0||(N<=K))//说明不能分出满足题意的两组
{
return 0;
}
else {
num++;
function((N - K) / 2, K);
function((N + K) / 2, K);
}
return 1;
}
int main()
{
int N, K;
cin >> N >> K;
function(N, K);
cout << num;
}
标程如下:
#include <cstdio>
using namespace std;
int n, m;
int f(int x) {
if ((x + m) % 2 == 0 && x - m > 0) {
return f((x + m) / 2) + f((x - m) / 2);
}
else {
return 1;
}
}
int main() {
scanf("%d %d", &n, &m);
printf("%d\n", f(n));
return 0;
}
另外,注意标程是如何利用返回值返回所需的结果的,而不是定义全局变量一个一个加