编程二维数组回形遍历如何写程序(C语言) 10

给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。输入的第一行上有两个整数,依次为row和col。... 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。
输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0<row<100, 0<col<100)
按遍历顺序输出每个整数。每个整数占一行。
请教高手,谢了
展开
 我来答
zhanngle
推荐于2017-12-16 · TA获得超过395个赞
知道小有建树答主
回答量:129
采纳率:100%
帮助的人:104万
展开全部
呵呵,我以前写过,是用java写的,给你看下java源码,以供参考,希望对你有帮助.
java与c++语法差不多,入口是main()方法

package test;

/**
* 打印回行图案
16 15 14 13
5 4 3 12
6 1 2 11
7 8 9 10
* @author zhanngle
*
*/
public class Round {

public static void main(String[] args) {
int row=10; //几行
int col=10; //几列
int[][] a=new int[row][col];

fill(a,row,col,0,0);
print(a);
}

/**
* 填写最外一圈的数据,如果还有内圈数据,则递归调用本身继续填写内圈数据,直到填写完毕
* @param a
* @param row
* @param col
* @param i
* @param j
*/
private static void fill(int [][] a,int row,int col,int i,int j) {

int n=row*col;
for(int c=0;c<=col-1;c++) { //横向填充数值
a[i][j+c]=n-c; //在首行从左到右填值
if(row!=1)
a[i+row-1][j+c]=n-(col*2+row-3)+c; //如果不只1行,在末行从左到右填值
}

for(int r=0;r<row-2;r++) { //竖向填充数值
a[i+row-2-r][j]=a[i+row-1][j]-r-1; //在首列从下往上填值
if(col!=1) //如果不只1列,大末列从下往上填值
a[i+row-2-r][j+col-1]=a[i+row-1][j+col-1]+r+1;
else //否则覆盖首列数据
a[i+row-2-r][j]=a[i+row-1][j]+r+1;
}

if(row-2>0 && col-2>0) fill(a,row-2,col-2,i+1,j+1); //如果还没填完数据,则递归填写
}

/**
* 打印二维数组
* @param a
*/
private static void print(int[][] a) {

for(int i=0;i<a.length;i++) {
for(int j=0;j<a[0].length;j++) {
System.out.printf("%4d",a[i][j]);
}
System.out.println();
}
}
}
匿名用户
2009-12-05
展开全部
#include <stdio.h>
int main()
{
int row,col;
int i,j,n,time=0;
scanf("%d%d",&row,&col);
int array[100][100];
for(i=0;i<row;i++)
for(j=0;j<col;j++)
scanf("%d",&array[ i ][ j ]);
for (n=0;;n++)
{
for (i=n;i<col-n;i++)
{
printf("%4d\n",array[ n ][ i ]);
time++;//每执行一次输出操作,time的值增加一
}
printf("\n");
if(time==row*col)break;
for (j=n+1;j<row-n;j++)
{
printf("%4d\n",array[ j ][col-n-1]);
time++;
}
printf("\n");
if(time==row*col)break;
for (i=col-2-n;i>=n;i--)
{
printf("%4d\n",array[row-n-1][ i ]);
time++;
}
printf("\n");
if(time==row*col)break;
for (j=row-2-n;j>n;j--)
{
printf("%4d\n",array[ j ][ n ]);
time++;
}
printf("\n");
if(time==row*col)break;
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式