舍友去笔试回来分享的一道题,
给出以下数字
1 2 6 7 15 16
3 5 8 14 17
4 9 13 18
10 12 19
11 20
21
打印出n行方阵
例如 n=3 则打印
1 2 6
3 5 8
4 9 13
int getWhenI0(int j)
{
if (j==0)
{
return 1;
}
else if(j%2!=0)
{
return getWhenI0(j-1)+1;
}
else
{
return getWhenI0(j-1)+4*(j/2);
}
}
int getWhenJ0(int i)
{
if (i==0)
{
return 1;
}
else if(i%2==0)
{
return getWhenJ0(i-1)+1;
}
else
{
return getWhenJ0(i-1)+2+4*((i-1)/2);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
const int n=10;
int a[n][n];
a[0][0]=1;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (i==0)
{
a[i][j]=getWhenI0(j);
}
else if (j==0)
{
a[i][j]=getWhenJ0(i);
}
else
{
int add=(i>j?i-j:j-i);
int small=(i<j?i:j);
int addEnd=4*small+add*2;
a[i][j]=a[i-1][j-1]+addEnd;
}
}
}
std::cout<<endl;
}