逆向输出回环数组
题目来源:http://noi.openjudge.cn/ch0108/23/
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内逆时针顺序遍历整个数组。如图所示:
输出
按遍历顺序输出每个整数。每个整数占一行。
样例输入
1 2 3 4
5 6 7 8
9 10 11 12
样例输出
1
5
9
10
11
12
8
4
3
2
6
7
PHP实现
$a = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
];
$row = count($a);
$col = count($a[0]);
$i=0;$j=0;
$count = $row * $col;
while ($count > 0){
//打印最左边一列
for($k=1;$k<$row; $k++){
$count--;echo $a[$i][$j] .PHP_EOL;$i++;
}
//打印最下边一行
for($k=1;$k<$col; $k++){
$count--;echo $a[$i][$j].PHP_EOL;$j++;
}
//打印最右边一列
for($k=1;$k<$row; $k++){
$count--;echo $a[$i][$j].PHP_EOL;$i--;
}
//打印最上边一行
for($k=1;$k<$col; $k++){
$count--;echo $a[$i][$j].PHP_EOL;$j--;
}
$row-=2;//走完一圈,行数减2
$col-=2;//走完一圈,列数减2
$i++;//最外一圈不用再次输出
$j++;//最外一圈不用再次输出
if($row == 1){
for($k=0;$k<$col; $k++){
$count--;echo $a[$i][$j].PHP_EOL;$j++;
}
}elseif($col == 1){
for($k=0;$k<$row; $k++){
$count--;echo $a[$i][$j].PHP_EOL;$i++;
}
}
}
可以调整代码实现原题目里的示例顺序输出。
C语言实现
#include <stdio.h>
#define maxN 101
int main(int argc, char *argv[])
{
int row,col,i,j,k;
int a[maxN][maxN];
int count;
printf("请输入行数 列数:\n");
scanf("%d%d",&row,&col);
printf("请输入%d*%d矩阵:\n", row, col);
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
scanf("%d",&a[i][j]);
}
}
if(row==1)//只有一行
{
i=0;j=0;
for(k=1;k<=col;k++)
{ printf("%d\n",a[i][j]);j++;}
}
else if(col==1)//只有一列
{
i=0;j=0;
for(k=1;k<=row;k++)
{ printf("%d\n",a[i][j]);i++;}
}
else
{
i=0;j=0;
count=row*col;
while(count>0)
{
for(k=1;k<row;k++)
{ count--; printf("%d\n",a[i][j]);i++;} //输出一个环的左侧那一条边
for(k=1;k<col;k++)
{ count--; printf("%d\n",a[i][j]);j++;} //输出一个环的下面那一条边
for(k=1;k<row;k++)
{ count--; printf("%d\n",a[i][j]);i--;} //输出一个环的右侧那一条边
for(k=1;k<col;k++)
{ count--; printf("%d\n",a[i][j]);j--;} //输出一个环的上面那一条边
i++;
j++;
row-=2;
col-=2;
if(row==1)//只剩下一行
{
for(k=1;k<=col;k++)
{ count--; printf("%d\n",a[i][j]);j++;}
}
else if(col==1)//只剩下一列
{
for(k=1;k<=row;k++)
{ count--; printf("%d\n",a[i][j]);i++;}
}
}
}
return 0;
}
(本文完)
本文优先在公众号"飞鸿影的博客(fhyblog)"发布,欢迎关注公众号及时获取最新文章推送!
本文优先在公众号"飞鸿影的博客(fhyblog)"发布,欢迎关注公众号及时获取最新文章推送!
作者:飞鸿影
出处:http://52fhy.cnblogs.com/
版权申明:没有标明转载或特殊申明均为作者原创。本文采用以下协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处。