蛇形矩阵 pascal(本题所有的矩阵,就相当于数字填入一个正方形)一个n行n列的蛇形矩阵可由如下方法生成:从矩阵的左上角(第1行第1列)出发,初始时向右移动一格,然后向左下移动,直到碰到

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 14:04:31

蛇形矩阵 pascal(本题所有的矩阵,就相当于数字填入一个正方形)一个n行n列的蛇形矩阵可由如下方法生成:从矩阵的左上角(第1行第1列)出发,初始时向右移动一格,然后向左下移动,直到碰到
蛇形矩阵 pascal
(本题所有的矩阵,就相当于数字填入一个正方形)
一个n行n列的蛇形矩阵可由如下方法生成:
从矩阵的左上角(第1行第1列)出发,初始时向右移动一格,然后向左下移动,直到碰到边界;如果下方是在范围内未出界的格子,则向下移动一格接着往右上移动,否则向右移动一格接着往右上移动,直到到达边界;接着,如果右边的格子在范围内,往右移动一格,否则向下移动一格,接着往左下直到边界;重复上述操作直至经过矩阵中所有格子.根据经过顺序,在格子中依次填入1,2,3,...,n*n,便构成了一个蛇形矩阵.
下图是一个n = 4 时的蛇形矩阵.
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
现给出矩阵大小n以及k,请你求出该矩阵中k值所在位置的行号和列号(行号列号都从1开始).
输入
第一行两个整数n和k,分别表示矩阵的行数和要求位置的数值k.
输出
输出一行两个整数,表示k在矩阵中的行号和列号,中间用一个空格分隔.
样例输入
4 5
样例输出
2 2
提示
【样例1解释】
4*4的矩阵如下:5位于第二行第二列.
1\x092\x096 7
3\x095\x098 13
4\x099\x0912 14
10\x0911\x0915 16
【数据范围】
对于70%的数据,1≤n≤100;
对于100%的数据,1≤n≤30,000,1≤k≤n*n.
不能用二维数组,

蛇形矩阵 pascal(本题所有的矩阵,就相当于数字填入一个正方形)一个n行n列的蛇形矩阵可由如下方法生成:从矩阵的左上角(第1行第1列)出发,初始时向右移动一格,然后向左下移动,直到碰到
下面给个用数组求解的思路:
const
\x09max=25; m=5;
var
\x09a:array[1..max,1..max] of integer;
\x09i,j,k,t:integer;
begin
\x09t:=1;
\x09for k:=2 to max+1 do
\x09for i:=1 to k-1 do
\x09begin
\x09\x09j:=k-i;
\x09\x09if odd(k) then a[i,j]:=t else a[j,i]:=t;
\x09\x09t:=t+1;
\x09end;
\x09for k:=max+2 to 2*max do
\x09for i:=k-max to max do
\x09begin
\x09\x09j:=k-i;
\x09\x09if odd(k) then a[i,j]:=t else a[j,i]:=t;
\x09\x09t:=t+1;
\x09end;
\x09for i:=1 to max do
\x09begin
\x09\x09for j:=1 to max do write(a[i,j]:4);
\x09\x09writeln;
\x09end;
\x09
\x09for i:=1 to max do for j:=1 to max do if a[i,j]=m then begin
\x09\x09writeln(i:4,j:4);
\x09\x09break;
\x09end;
end.