暴力枚举,纯数学解法。
当N=1时,N=1;
当N=2时,N=2;
当N=3时,N=6;
当N=4时,N=7;
当N>4时,存在
c
l
u
m
s
y
(
N
)
=
N
×
(
N
−
1
)
/
(
N
−
2
)
+
(
N
−
3
)
−
(
N
−
4
)
×
.
.
.
clumsy(N) = N \times (N-1)/(N-2)+(N-3)-(N-4) \times ...
clumsy(N)=N×(N−1)/(N−2)+(N−3)−(N−4)×... 。计算遵循四则运算法则,观察展开式,基本是以4个数为一组先进行乘除运算,再对各组进行加减运算。
由上,化简上式,先讨论
N
×
(
N
−
1
)
/
(
N
−
2
)
N \times (N-1)/(N-2)
N×(N−1)/(N−2) 。化简,易得
N
×
(
N
−
1
)
/
(
N
−
2
)
=
N
+
N
N
−
2
N \times (N-1)/(N-2)=N+\frac{N}{N-2}
N×(N−1)/(N−2)=N+N−2N 。因为这里使用的是地板除,向下取整,所以,当N>4时,
N
N
−
2
=
N
+
1
\frac{N}{N-2}=N+1
N−2N=N+1 。
综上,枚举法归纳出N>4时的四种情况:
1.当N%4=1:clumsy(N)=N+2;
2.当N%4=2:clumsy(N)=N+2;
3.当N%4=3:clumsy(N)=N-1;
4.当N%4=0:clumsy(N)=N+1;
代码(C)
int clumsy(int N){
//数学解法
if(N==1||N==2)
return N;
else if(N==3)
return 6;
else if(N==4)
return 7;
else{ //N>4
if(N%4==0)
return N+1;
else if(N%4==3)
return N-1;
else //N%4=2或1
return N+2;
}
return 1;
}