BASIC-25 VIP试题 回形取数
2017-12-19 14:49
99 查看
/*
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
*/
#include <stdio.h>
void shuru( int , int n , int []
);
void hxqs( int , int n , int []
);
int main(void)
{
int m , n ;
scanf("%d%d",&m , &n );
int s[m]
;
shuru(m , n, s);
hxqs(m , n , s );
return 0;
}
void shuru( int m , int n , int s[]
)
{
int i , j ;
for( i = 0 ;i < m ; i ++)
{
for( j = 0 ; j < n ; j ++)
{
scanf("%d", &s[i][j]);
}
}
}
void hxqs( int m , int n , int s[]
)
{
int hx = 0 ; //计算 个数
int x= -1 , y = 0 ; // 会回型位置
while(hx < m * n)
{
while(x + 1 < m &&s[x + 1][y] != -1) // 竖直向下
{
printf("%d ", s[++x][y]);
s[x][y] = -1;
hx ++;
}
while(y + 1 < n && s[x][y + 1] != -1) // 左
{
printf("%d ", s[x][++y]);
s[x][y] = -1;
hx ++;
}
while(x - 1 >= 0 && s[x - 1][y] != -1) //上
{
printf("%d ", s[--x][y]);
s[x][y] = -1;
hx ++;
}
while(y - 1 >= 0 && s[x][y - 1] != -1) // 右
{
printf("%d ", s[x][--y]);
s[x][y] = -1;
hx ++;
}
}
}
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
*/
#include <stdio.h>
void shuru( int , int n , int []
);
void hxqs( int , int n , int []
);
int main(void)
{
int m , n ;
scanf("%d%d",&m , &n );
int s[m]
;
shuru(m , n, s);
hxqs(m , n , s );
return 0;
}
void shuru( int m , int n , int s[]
)
{
int i , j ;
for( i = 0 ;i < m ; i ++)
{
for( j = 0 ; j < n ; j ++)
{
scanf("%d", &s[i][j]);
}
}
}
void hxqs( int m , int n , int s[]
)
{
int hx = 0 ; //计算 个数
int x= -1 , y = 0 ; // 会回型位置
while(hx < m * n)
{
while(x + 1 < m &&s[x + 1][y] != -1) // 竖直向下
{
printf("%d ", s[++x][y]);
s[x][y] = -1;
hx ++;
}
while(y + 1 < n && s[x][y + 1] != -1) // 左
{
printf("%d ", s[x][++y]);
s[x][y] = -1;
hx ++;
}
while(x - 1 >= 0 && s[x - 1][y] != -1) //上
{
printf("%d ", s[--x][y]);
s[x][y] = -1;
hx ++;
}
while(y - 1 >= 0 && s[x][y - 1] != -1) // 右
{
printf("%d ", s[x][--y]);
s[x][y] = -1;
hx ++;
}
}
}
相关文章推荐
- BASIC-21 VIP试题 Sine之舞
- BASIC-22 VIP试题 FJ的字符串
- BASIC-15 VIP试题 字符串对比
- BASIC-23 VIP试题 芯片测试
- BASIC-15 字符串对比 字符串 大小写 VIP试题
- BASIC-17 VIP试题 矩阵乘法
- BASIC-24 VIP试题 龟兔赛跑预测
- BASIC-18 VIP试题 矩形面积交
- BASIC-26 VIP试题 报时助手
- BASIC-19 VIP试题 完美的代价
- BASIC-27 VIP试题 2n皇后问题
- BASIC-28 VIP试题 Huffuman树
- BASIC-30 VIP试题 阶乘计算
- BASIC-14 时间转换 取余 数字字符混合输出 VIP试题
- 裸考—歪理邪说通过系统分析师考试之五(分析2010上半年系统分析师上午试题21-25题)
- 蓝桥杯-Huffman树(VIP试题)
- ALGO-100 整除问题 循环语句 数学知识 VIP试题
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- PAT (Basic Level) Practise (中文) 1005继续(3n+1)猜想 (25)
- PAT (Basic Level) Practise (中文) 1045. 快速排序(25)