【题解】UVA10161 Ant on a Chessboard
_Qingyu1123_ · · 题解
【题解】UVA10161 Ant on a Chessboard
题目意思
有一只蚂蚁从原点
思路
首先这是一道找规律题,其实就和蛇形矩阵差不多,画了一个图,发现对角线上的数字的公差是等差数列,公式为
所以先要给的
这个蛇形矩阵有以下规律:
-
奇数行与列:
行: 从左到右到此行对角线上的数字依次递减。
列: 从对角线上数字开始从上到下依次递减。
-
偶数行与列:
行:从左到右到此行对角线上的数字依次递增。
列:从对角线上数字开始从上到下依次递增。
AC 代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
int d=sqrt(n);
if((d*d)!=n)
d++;
//等价于向上取整
int x=d*(d-1)+1;
//x为对角线上的数字
if(d%2!=0)
//奇数 行:left->right top->bottom 递减
{
if(n>=x)
cout<<d-(n-x)<<" "<<d<<endl;
else
cout<<d<<" "<<d-(x-n)<<endl;
}
else
//偶数 行:left->right top->bottom 递增
{
if(n<=x)
cout<<d-(x-n)<<" "<<dia<<endl;
else
cout<<d<<" "<<d-(n-x)<<endl;
}
return 0;
}
ac 记录。