碰见这个蚂蚁棋盘问题。我开始的时候是纯手工模拟
,交上后严重超时
,交上后严重超时
代码见;
#include <iostream>
using namespace std;
struct point
{
int i , j;
};
void returnij(int step)
{
point p;
p.i = 1;
p.j = 1;
int ceng = 1;
int xu = 1;
while(xu<step)
{
if(step==1)
{
break;
}
if(xu<step)
{
if(ceng%2)
{
p.i++;
xu++;
if(xu==step)break;
}
else
{
p.j++;
xu++;
if(xu==step)break;
}
}
int temp = ceng;
while(temp--&&xu<step)
{
if(ceng%2)
{
p.j++;
xu++;
if(xu==step)break;
}
else
{
p.i++;
xu++;
if(xu==step)break;
}
}
temp = ceng;
while(temp--&&xu<step)
{
if(ceng%2)
{
p.i--;
xu++;
if(xu==step)break;
}
else
{
p.j--;
xu++;
if(xu==step)break;
}
}
ceng++;
}
cout<<p.j<<" "<<p.i<<endl;
}
int main ()
{
int n;
while(cin>>n)
{
if(!n)break;
returnij(n);
}
return 0;
}
后来看了人家的解题报告后,我才知道了其中的规律
根据数学规律做题,完全不存在效率问题
但是我进来好像养成了看人家解题报告的习惯
这是十分危险的
有许多的前车之鉴,
以后还需克服!!!!
#include <iostream>
using namespace std;
int main ()
{
int n;
while(cin>>n)
{
if(!n)break;
int x, y;
int k = 0;
for(k = 0; k * k < n; k++);
int a = (k-1)*(k-1);
int b = n - a;
if(k&1)
{
if(b<=k)
{
x = k;
y = b;
}
else
{
y = k;
x = 2 * k - b;
}
}
else
{
if(b<=k)
{
y = k;
x = b;
}
else
{
x = k;
y = 2 * k - b;
}
}
cout<<x<<" "<<y<<endl;
}
}