UVa 10161 棋盘上的蚂蚁
2014-02-10 11:44
232 查看
/*
* 解题思路:
* 观察输入N可知,输入N最大为2*10^9,若模拟其行走过程则超时( 也不要考虑用数组存,开不了2*10^9这么大的数组 )
* 此题技巧是采用数学推导规律的方法进行解题!
*/
分奇偶讨论版本:
#include <math.h>
#include <stdio.h>
int main( )
{
int n;
int x;
while( scanf("%d",&n) && n )
{
x = (int)sqrt( n );
if( (x*x) & 1 )
if( x*x == n )
printf("%d %d\n",1 , x );
else
if( n-x*x > x+1 )
printf("%d %d\n",x+1,x-(n-x*x));
else
printf("%d %d\n",n-x*x,x+1);
else
if( x*x == n )
printf("%d %d\n",x,1);
else
if( n-x*x > x+1 )
printf("%d %d\n",x+1-(n-x*x-x-1),x+1);
else
printf("%d %d\n",x+1,n-x*x);
}
return 0;
}
模拟其过程版本(TimeLimit ):
#include <stdio.h>
int dir[ 10 ] = {0,1,2,3,2,1,4};
int q;
int main( )
{
int n;
int xx , yy;
int i;
int sum,total,vis;
while( scanf("%d",&n) && n )
{
xx = yy = 0;
q = sum = 1;
n--;
total = 0;
vis = 3;
while( n-- )
{
if( total < vis )
total++;
else if( total == vis )
{
total = 0;
sum++;
vis += 2;
}
if( dir[ q ] == 1 )
{
if( yy < sum )
yy++;
else
{
q++;
if( dir[ q ] == 2 )
xx++;
else if( dir[ q ] == 4 )
xx--;
}
}
else if( dir[ q ] == 2 )
{
if( xx < sum )
xx++;
else
{
q++;
if( dir[ q ] == 3 )
yy--;
else if( dir[ q ] == 1 )
yy++;
}
}
else if( dir[ q ] == 3 )
{
if( yy > 0 )
yy--;
else
{
q++;
xx++;
}
}
else if( dir[ q ] == 4 )
{
if( xx > 0 )
xx--;
else
{
q = 1;
yy++;;
}
}
}
printf("%d %d\n",++xx,++yy);
}
return 0;
}
* 解题思路:
* 观察输入N可知,输入N最大为2*10^9,若模拟其行走过程则超时( 也不要考虑用数组存,开不了2*10^9这么大的数组 )
* 此题技巧是采用数学推导规律的方法进行解题!
*/
分奇偶讨论版本:
#include <math.h>
#include <stdio.h>
int main( )
{
int n;
int x;
while( scanf("%d",&n) && n )
{
x = (int)sqrt( n );
if( (x*x) & 1 )
if( x*x == n )
printf("%d %d\n",1 , x );
else
if( n-x*x > x+1 )
printf("%d %d\n",x+1,x-(n-x*x));
else
printf("%d %d\n",n-x*x,x+1);
else
if( x*x == n )
printf("%d %d\n",x,1);
else
if( n-x*x > x+1 )
printf("%d %d\n",x+1-(n-x*x-x-1),x+1);
else
printf("%d %d\n",x+1,n-x*x);
}
return 0;
}
模拟其过程版本(TimeLimit ):
#include <stdio.h>
int dir[ 10 ] = {0,1,2,3,2,1,4};
int q;
int main( )
{
int n;
int xx , yy;
int i;
int sum,total,vis;
while( scanf("%d",&n) && n )
{
xx = yy = 0;
q = sum = 1;
n--;
total = 0;
vis = 3;
while( n-- )
{
if( total < vis )
total++;
else if( total == vis )
{
total = 0;
sum++;
vis += 2;
}
if( dir[ q ] == 1 )
{
if( yy < sum )
yy++;
else
{
q++;
if( dir[ q ] == 2 )
xx++;
else if( dir[ q ] == 4 )
xx--;
}
}
else if( dir[ q ] == 2 )
{
if( xx < sum )
xx++;
else
{
q++;
if( dir[ q ] == 3 )
yy--;
else if( dir[ q ] == 1 )
yy++;
}
}
else if( dir[ q ] == 3 )
{
if( yy > 0 )
yy--;
else
{
q++;
xx++;
}
}
else if( dir[ q ] == 4 )
{
if( xx > 0 )
xx--;
else
{
q = 1;
yy++;;
}
}
}
printf("%d %d\n",++xx,++yy);
}
return 0;
}
相关文章推荐
- UVa 10161 棋盘上的蚂蚁
- UVA 10161 棋盘上的蚂蚁
- uva 10161-棋盘上的蚂蚁
- UVa Problem 10161 Ant on a Chessboard (棋盘上的蚂蚁)
- UVa_OJ 10161 棋盘上的蚂蚁
- UVA - 10161 Ant on a Chessboard
- uva 10161 Ant on a Chessboard
- UVa-10161-Ant on a Chessboard
- uva 861 Little Bishops 棋盘上的象
- UVA - 10161 Ant on a Chessboard(数学规律)
- UVA 10714 Ants 蚂蚁 贪心+模拟 水题
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
- UVA1629[Cake slicing] 棋盘动态规划
- uva 10161 Ant on a Chessboard
- uva 10161 Ant on a Chessboard
- UVa10161 Ant on a Chessboard
- UVa 10161 Ant on a Chessboard (简单数学)
- uva 10161 - Ant on a Chessboard
- uva--10161--Ant on a Chessboard
- Uva10161 Ant on a Chessboard