牛牛想把一个数拆成两个自然数之和,但是需要符合规则(拆后得到的两个自然数不相等),牛牛想知道一共有多少种拆法,只不过他不知道该如何解决这个问题,所以他想请你帮忙。
给定一个数n,返回将这个数n拆成两个自然数之和一共有多少种拆法(符合规则)。

题解:此题初看时无法下手,但我们不如模拟一些数据:
n res
1 0
2 0
3 1
4 1
5 2
6 2
...
自此我们不难看出数之间的规律,分奇数偶数进行讨论即可,奇数时/2,偶数时/2-1,或者我们特判<=2时都是0,其余都是/2也可以
时间复杂度:图片说明
空间复杂度:图片说明
参考代码如下:

/**
 * 返回将这个数n拆成两个自然数之和一共有多少种拆法(符合规则)。
 * @param n int整型 代表题意中的n
 * @return int整型
 */
int solve(int n)
{
    // write code here
    return (n & 1) ? n / 2 : n / 2 - 1;
}