洋葱矩阵嗯无语了啊!

洋葱矩阵
时间限制:1秒 内存限制:128M
题目描述

小可想到了一种像洋葱一样一层一层地填充矩阵的方法,如下图:

img

从1开始如图填充。现在小可想要考考你,给你一个数k,需要你计算出这个数在矩阵中的坐标是多少。

矩阵中,
1的坐标为(1,1),
2的坐标为(1,2),
3的坐标为(2,2),…

输入描述

第一行一个正整数
t(1≤t≤100),代表小可问了t次。
每次询问,小可给出一个正整数
k(1≤k≤10^9)。
输出描述
对于小可的每次询问,输出k在矩阵中的坐标。
样例输入
7
11
14
5
4
1
2
1000000000
样例输出
2 4
4 3
1 3
2 1
1 1
1 2
31623 14130

这是我的代码

#include
using namespace std;
int a[100005];
const int N=1e9+1;
void algorithm(){
    long long sum=0;
    for(int i=1,j=1; ;i+=2,j++){
        a[j]=i;
        sum+=i;
        if(sum>=N){
            break;
        }
    }
}
int main(){
    algorithm();
    int t;
    cin>>t;
    while(t--){
        int k;
        cin>>k;
        int ans=0,cnt=0,flag=1;
        for(int i=1; ; i++){
            cnt+=a[i];
            if(cnt==k){
                ans++;
                break;
            }
            if(cnt>k){
                flag=k-(cnt-a[i]);
                ans++;
                break;
            }
            ans++;
        }
        int x,y;
        if(flag>=a[ans]/2+1){
            x=ans;
            y=a[ans]-flag+1;
        }
        else{
            x=flag;
            y=ans;
        }
        cout<" "<

只能得50.00000000001
咋改啊

你是直接把输入示例粘贴进去了吧。要一行一行输入,才会正常输出。

我这输出正常呢