直接按题意模拟打表了.貌似不用输出-1.
#include <iostream>
#include <memory.h>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 51;
int pegs[maxn], tb[maxn],n;
bool put(int num){
for (int i = 0; i < n; ++i){
if(pegs[i] == 0){
pegs[i] = num;
return true;
}else{
double sq = sqrt(pegs[i] + num + 0.0);
if(sq == (int)sq){
pegs[i] = num;
return true;
}
}
}
return false;
}
void init(){
for (int i= 1; i <= 50;++i){
memset(pegs, 0, sizeof(pegs));
n = i;
int ans = 1;
while(put(ans))ans++;
tb[i] = ans -1;
}
}
int main(){
int T;
scanf("%d", &T);
init();
while (T--){
scanf("%d", &n);
printf("%d\n",tb[n]);
}
return 0;
}