请问哪里错了,修改我的错误程序

有n个盒子从左往右排成一行,编号是1至n。第1个盒子的巧克力数量是1,第2个盒子的巧克力数量也是1,对于i >=3都满足:
f[i] = f[i-1] + f[i-2],即第i个盒子的巧克力数量等于其前面两个盒子的巧克力数量之和。
容易看出,这n个盒子的巧克力数量其实是斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, ......
现在要把这n个盒子分成两堆,使得每堆的巧克力数量相等,可以做到吗?
如果可以输出”YES”,否则输出”NO”。
注意:一个盒子要么在一堆,要么在另一堆,不能拆开盒子。
输入格式
第一行,一个正整数R,表示有R组测试数据。1<=R<=3。
接下来有R行,每行一个整数n。1<=n<=1000。
【提示】
有80%的数据,1<=n<=40。
输出格式
共R行,每行一个字符串,”YES”或者”NO”, 双引号不用输出。
输入/输出例子1
输入:
3
5
3
1
输出:
YES
YES
NO
错误程序
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,n;
while( scanf("%d",&t) )
{
while( t-- )
{
scanf("%d",&n);

        if( judge(n) ) printf("YES\n");
        else printf("NO\n");
    }
}

return 0;

}

judge作用是什么,c++自带函数?