水题,开根号判断大致范围,再找即可。
#include<cstdio>
#include<cmath>
#include<cstdlib>
using namespace std;
int main(){
int t, CASE(0);
long long int n;
scanf("%d", &t);
while(t--){
scanf("%lld", &n);
long long int m = sqrt(n);
printf("Case %d: ",++CASE);
if(m*m == n){
if(m&1) printf("1 %lld\n", m);
else printf("%lld 1\n", m);
continue;
}
if(m&1){
if(m*m+m+1 >= n) printf("%lld %lld\n", n-m*m, m+1);
else printf("%lld %lld\n", m+1, (m+1)*(m+1)-n+1);
}else{
if(m*m+m+1 >= n) printf("%lld %lld\n", m+1, n-m*m);
else printf("%lld %lld\n", (m+1)*(m+1)-n+1, m+1);
}
}
}