精华内容
下载资源
问答
  • 二维数组回形遍历 C++

    2020-11-05 21:51:57
    二维数组回形遍历 C++ 具体的思路就是: 设置开始遍历的行列、结束遍历的行列, 用四条边分别循环 循环边界条件是遍历数目为全部数目 有两个易错点: 1.最后一个数字需要单独处理 2.遍历到最后一行或列时,如果不...

    二维数组回形遍历 C++

    关于输入

    给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:
    在这里插入图片描述
    输入的第一行上有两个整数,依次为row和col。
    余下有row行,每行包含col个整数,构成一个二维整数数组。
    (注:输入的row和col保证0<row<100, 0<col<100)

    关于输出

    按遍历顺序输出每个整数。每个整数占一行。

    例子输入

    4 4
    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7

    例子输出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    具体的思路就是:
    设置开始遍历的行列、结束遍历的行列,
    用四条边分别循环
    循环边界条件是遍历数目为全部数目

    有两个易错点:
    1.最后一个数字需要单独处理
    2.遍历到最后一行或列时,如果不及时退出循环,会有杂项
    如[1,2,3,4,5],遍历完会再从右往左输出一遍。

    //2020-11-1
    
    #include <iostream>
    using namespace std;
    int main()
    {
    	int row, col;
    	cin >> row >> col;
    	int a[101][101];
    	int count;
    	count = row * col;
    	for(int i = 0; i<row ;i++)		//输入数据
    		for (int j = 0; j < col; j++)
    		{
    			cin >> a[i][j];     
    		}
    
    	//回形读取
    	int it = 0, jt = 0;
    	int starti = 0, endi = row - 1, startj = 0, endj = col - 1;
    	while (count > 0)
    	{
    		while (jt < endj && count!=0)     //上面行
    		{
    			cout << a[it][jt] << endl;
    			count--;
    			jt++;
    		}
    		starti++; 
    		
    		while (it < endi && count!=0)    //右边列
    		{
    			cout << a[it][jt] << endl;
    			count--;
    			it++;
    		}
    		endj--;  
    
    		while (jt > startj && count!=0)  //下面行
    		{
    			cout << a[it][jt] << endl;
    			count--;
    			jt--;
    		}
    		endi--; 
    		
    		while (it > starti && count!=0)   //左边列
    		{
    			cout << a[it][jt] << endl;
    			count--;
    			it--;
    		}
    		startj++; 
    
    		if (count == 1)     //最后一个数字手动处理
    		{
    			cout << a[it][jt] << endl;
    			count--;
    		}
    	}
    	return 0;
    }
    
    展开全文
  • 二维数组回形遍历

    2020-01-04 17:45:41
    给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示: 输入 输入的第一行上有两个整数,依次为row和col。 余下有row行,每行包含col个整数,构成一个...

    描述
    给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:

    在这里插入图片描述

    输入
    输入的第一行上有两个整数,依次为row和col。
    余下有row行,每行包含col个整数,构成一个二维整数数组。
    (注:输入的row和col保证0 < row < 100, 0 < col < 100)
    输出
    按遍历顺序输出每个整数。每个整数占一行。
    样例输入
    4 4
    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7
    样例输出
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    #include<stdio.h>
    int a[120][120],b[120][120];
    int main(){
    	int r,c,i,j,N=0;
    	scanf("%d %d",&r,&c);
    	for(i=0;i<r;i++){
    		for(j=0;j<c;j++){
    			scanf("%d",&a[i][j]);
    			b[i][j]=1;//用于判断是否使用
    		}
    	}
    	int m=r*c;
    	i=0;j=0;
    	while(N<r*c){
    		while(a[i][j]&&b[i][j]){
    			b[i][j]=0;
    			printf("%d\n",a[i][j++]);
    			N++;
    		}
    		i++;j--;
    		while(a[i][j]&&b[i][j]){
    			b[i][j]=0;
    			printf("%d\n",a[i++][j]);
    			N++;
    		}
    		i--;j--;
    		while(a[i][j]&&b[i][j]){
    			b[i][j]=0;
    			printf("%d\n",a[i][j--]);
    			N++;
    		}
    		i--;j++;
    		while(a[i][j]&&b[i][j]){
    			b[i][j]=0;
    			printf("%d\n",a[i--][j]);
    			N++;
    		}
    		i++;j++;
    	}
    } 
    

    NOI(OJ)编程基础篇目录

    展开全文
  • 23:二维数组回形遍历

    2017-07-29 18:22:37
    23:二维数组回形遍历 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示...

    23:二维数组回形遍历



    总时间限制: 
    1000ms 
    内存限制: 
    65536kB
    描述

    给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:


    输入
    输入的第一行上有两个整数,依次为row和col。
    余下有row行,每行包含col个整数,构成一个二维整数数组。
    (注:输入的row和col保证0 < row < 100, 0 < col < 100)
    输出
    按遍历顺序输出每个整数。每个整数占一行。
    样例输入
    4 4
    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7
    样例输出
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    来源
    北京大学2009年医学部练习题

    分析:参考:http://www.cnblogs.com/geek-007/p/5677254.html

    不过有一个问题。。。往右遍历的时候,如果不到底,会发生超时错误。。这一点不是很明白。。。


    #include <stdio.h>
    #include <iostream>
    #include <stack>
    #include <string.h>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    #include <map>
    #include <set>
    #include <string>
    using namespace std;
    typedef long long LL;
    #define MAX 1001
    int a[MAX][MAX];
    int b[MAX][MAX];
    
    
    
    int main() {
        //freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
        int n, m;
        scanf("%d%d",&n,&m);
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                scanf("%d",&a[i][j]);
            }
        }
        int flag = 1; //当前为第1层
        int sum = n * m;
        while(1){
            for(int i = flag - 1; i < m - flag; i++){
                //cout << a[flag][i] << endl;
                printf("%d\n",a[flag - 1][i]);
                sum--;
                if(sum == 0){
                    return 0;
                }
            }
            //这一点 如果第二个for循环将i的条件改为 i < n - flag;
            //即 终止条件 i == n - flag - 1;
            //第三个for循环 的 i的初始值 由 m - flag 开始 会造成超时错误。。不知道为啥。。。
            for(int i = flag - 1; i <= n - flag; i++){
                //cout << a[i][m - flag - 1] << endl;
                printf("%d\n",a[i][m - flag]);
                sum--;
                if(sum == 0){
                    return 0;
                }
            }
            for(int i = m - flag - 1; i > flag - 1; i--){
                //cout << a[n - flag - 1][i] << endl;
                printf("%d\n",a[n - flag][i]);
                sum--;
                if(sum == 0){
                    return 0;
                }
            }
            for(int i = n - flag; i >= flag; i--){
                //cout << a[i][flag] << endl;
                printf("%d\n",a[i][flag - 1]);
                sum--;
                if(sum == 0){
                    return 0;
                }
            }
            flag++;
    
        }
        return 0;
    
    }
    
    
    
    


    展开全文
  • C:二维数组回形遍历总时间限制: 1000ms 内存限制: 65536kB描述给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示: 输入输入的第一行上有两个整数...

    C:二维数组回形遍历 
    总时间限制: 1000ms 内存限制: 65536kB 
    描述 
    给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:

    这里写图片描述

    输入 
    输入的第一行上有两个整数,依次为row和col。 
    余下有row行,每行包含col个整数,构成一个二维整数数组。 
    (注:输入的row和col保证0 < row < 100, 0 < col < 100) 
    输出 
    按遍历顺序输出每个整数。每个整数占一行。 
    样例输入 
    4 4 
    1 2 3 4 
    12 13 14 5 
    11 16 15 6 
    10 9 8 7 
    样例输出 









    10 
    11 
    12 
    13 
    14 
    15 
    16 
    来源 
    北京大学2009年医学部练习题

    代码:

    #include<iostream>
    using namespace std;
    int main(){
    int row,col;//行数和列数
    int n;//用于控制回形输出
    int times=0;//输出的次数
    while(scanf("%d%d", &row, &col)!=EOF){
    int **p=new int*[row];//动态二维数组
    int i,j;
    for(i=0; i<row; i++){
      p[i]=new int[col];
      for(j=0; j<col; j++){
        scanf("%d", &p[i][j]);//输入二维数组的所有元素
      }
    }
    int max=col*row;//输出结束则停止输出
    for(n=0; ; n++){
        for(j=n; j<col-n; j++){//输出回形的上面的行
          cout<<p[n][j]<<endl;
          times++;
        }
        if(max==times)break;
        for(i=n+1; i<row-n; i++){//输出回形的右边的列
          cout<<p[i][col-n-1]<<endl;
          times++;
        }
        for(j=col-n-2; j>=n; j--){
         cout<<p[row-n-1][j]<<endl;//输出回形的下面的行
         times++;
        }
        if(max==times)break;
        for(i=row-n-2; i>n; i--){//输出回形的左边的列
         cout<<p[i][n]<<endl;
         times++;
        }
        if(max==times)break;
    }
    for(i=0; i<row; i++){//主动释放动态二维数组的空间
        delete[] p[i];
        p[i]=NULL;
    }
        delete[] p;
        p=NULL;
    }
    return 0;
    }

    转载于:https://www.cnblogs.com/kxzh/p/8608374.html

    展开全文
  • 23:二维数组回形遍历 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个...
  • @二维数组回形遍历 题目大意   按如图所示的方法遍历输出一个给出的数组。         输入输出   第一行为两个整数n与m表示行数和列数 接下来输入要遍历的数组: n行,每行m个数   输出为n*m行回形...
  • 适合阅读人群:身为一枚标准蒟蒻,在经过近一个半月...问题 T: 二维数组回形遍历时间限制: 1 Sec 内存限制: 128 MB题目描述给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺...
  • C:二维数组回形遍历 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:输入 输入的第一行上有两个...
  • 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:输入输入的第一行上有两个整数,依次为row和col。余下有row行,每行包含col个整数,构成一个二维...
  • 二维数组回形遍历java

    2020-06-10 14:36:55
    给定一个 rowrow 行 colcol 列的整数数组 array,要求从 array[0][0] 元素开始,按回形从外向内顺时针顺序遍历整个数组 输入描述 输入的第一行上有两个整数,依次为 rowrow 和 colcol。 余下有 rowrow 行,每行包含 ...
  • 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示: 输入 输入的第一行上有两个整数,依次为row和col。 余下有row行,每行包含col个整数,构成一个...
  • 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示: 输入 输入的第一行上有两个整数,依次为row和col。 余下有row行,每行包含col个整数,构成一个...
  • JS 二维数组回形遍历

    2019-11-04 12:00:36
    Given an n x n array, return the array elements arranged from outermost elements to the middle element, traveling clockwise. array = [[1,2,3], [4,5,6], [7,8,9]] snail(array) #=>...
  • 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示: 输入输入的第一行上有两个整数,依次为row和col。余下有row行,每行包含col个整数,构成一...
  • 链接:http://noi.openjudge.cn/ch0108/23/ #include<bits/stdc++.h> using namespace std; int s[200][200],vis[200][200]; int dir[2][4]={{0,1,0,-1},{1,0,-1,0}};... //freopen("t.tx...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

二维数组回形遍历