Problem D: TomCat要吃饭

Description

TomCat 是一次单身Cat,但是他有着很多的基友,每次吃饭都会QQ他的某一只基友,然而,他的基友Jerry 总是很墨迹。等待是无聊的,这时TomCat在学校的地上乱走,这时他发现地上有方块铺成的,他按照下图的规律走,现在无聊的TomCat想知道,他如果走了n步,他应该在什么位置,位置用坐标(x,y)表示。

 

Input

每次输入一个数n,n=0是输入结束(n<=2*10^9)

 

Output

输出坐标(x,y)

 

Sample Input

8 20 25 0

Sample Output

2 3 5 4 1 5

分析:

这是一道找规律的题,但是这种图形找规律的,我一般是找不出来的。啊,陈同学竟然说这是小学数学题,可是我不会啊????好在参考了别人的题解,看懂了。。。

首先关键点在于(1,1)(2,2)...(x,x)对角线上的点n=x(x-1)-1

因为给出的是n,通过根号n,根号n+1,知道大概的位置在哪一行那一列,计算n与对角线上的n的差值,求出坐标(分奇偶,)

以下为参考其他博客写出的代码:

#include<stdio.h>
#include<math.h> 
int main()
{
	long long n;
	while(scanf("%lld",&n)!=EOF&&n)
	{
		long long x=sqrt(n);
		if(x*x==n)    //如果n是一个数的平方,那么这个数肯定在边上。 
		{
	       if(x%2!=0) printf("1 %lld\n",x);//奇数在最左面一列(1,sqrt(n))
		   else printf("%lld 1\n",x);//如果是偶数那么在最底下一行 (sqrt(n),1)
		   continue;		                              
		} 
		x++;               //n开根号后+1得到的x,,,即答案的横或纵坐标(看奇偶性 
		long long n2=x*x-x+1;      //对角线上的值 即(x,x) 的值 
		if(x%2)                         //如果x为奇数 
		{
			if(n<n2) printf("%lld %lld\n",x,x-n2+n);  //(x,y) y=x-对角线上的值与n的差值 
			else printf("%lld %lld\n",x-n+n2,x);  //(y,x)
		} 
		else                             //如果偶数 
		{
			if(n>n2) printf("%lld %lld\n",x,x-n+n2);//(x,y) 
			else printf("%lld %lld\n",x-n2+n,x);//(y,x)
		}
	}
	return 0;                                       
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值