水题,开根号判断大致范围,再找即可。
#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 ", m); else printf("%lld 1 ", m); continue; } if(m&1){ if(m*m+m+1 >= n) printf("%lld %lld ", n-m*m, m+1); else printf("%lld %lld ", m+1, (m+1)*(m+1)-n+1); }else{ if(m*m+m+1 >= n) printf("%lld %lld ", m+1, n-m*m); else printf("%lld %lld ", (m+1)*(m+1)-n+1, m+1); } } }