精华内容
下载资源
问答
  • 问题描述: 输入一个正整数n,生成一个nxn的蛇形方阵(具体见样例)。 输入格式: 一行一个正整数n,1。 输出格式: 共n行,每行n个正整数,每个正整数占5列。
  • 蛇形方阵

    千次阅读 2019-02-25 14:19:53
    蛇形方阵 题目:给定一个数n,根据这个数所组成的n*n的方阵做出蛇形方阵 如 输入: 3 输出: 1 2 3 8 9 4 7 6 5 一个很简单的强模拟 思路:判断是否越过边界或再走一步就会碰到其他数字,假如碰到就转弯...

    在我几个月的OI生涯里,我最喜欢做模拟题,而且是那种纯暴力的强模拟


    蛇形方阵

    题目:给定一个数n,根据这个数所组成的n*n的方阵做出蛇形方阵

    输入:
    3
    输出:
    1 2 3
    8 9 4
    7 6 5

    一个很简单的强模拟
    思路:判断是否越过边界或再走一步就会碰到其他数字,假如碰到就转弯。再根据转换方向调整坐标。

    打了一串很长的代码后的输出老是有问题

    检查并打表的时候才明白拐弯处我没有往前而是覆盖了一下再前进

    贴上AC代码
    有点恶心,就是每个大括号都换行了
    但加了注释应该还是能看懂的

    #include<bits/stdc++.h>
    using namespace std;
    int a[760][760]={};
    int n;
    int main()
    {
    	cin>>n;
    	int count=1;
    	string s="right";
    	int i=1,j=1;//坐标系 
    	while (count<=n*n)
    	  {
    	  	a[i][j]=count;
    	  	count++;
    	  	if (s=="right")//往右走 
    	  	  {
    	  	  	j++;
    	  	  	if (j>n||a[i][j]!=0)//到边界或撞墙 
    	  	  	  {
    	  	  	  	s="down";//往右后往下 
    	  	  	  	j--;
    	  	  	  	i++;//往下走一步 
    	  	  	  }
    	  	  }
    	  	else
    	  	if (s=="down")//往下走 
    	  	  {
    	  	  	i++;
    	  	  	if (i>n||a[i][j]!=0)//到边界或撞墙
    	  	  	  {
    	  	  	  	s="left";//往下后往左
    	  	  	  	i--;
    	  	  	  	j--;//往左走一步 
    	  	  	  }
    	  	  }
    	  	else
    	  	if (s=="left")//往左走 
    	  	  {
    	  	  	j--;
    	  	  	if (j<1||a[i][j]!=0)//到边界或撞墙
    	  	  	  {
    	  	  	  	s="up";//往左后往上 
    	  	  	  	j++;
    	  	  	  	i--;//往上走一步 
    	  	  	  }
    	  	  }
    	  	else
    	  	if (s=="up")//往上走 
    	  	  {
    	  	  	i--;
    	  	  	if (i<1||a[i][j]!=0)//到边界或撞墙
    	  	  	  {
    	  	  	  	s="right";//往上后往右 
    	  	  	  	i++;
    	  	  	  	j++;//往右走一步 
    	  	  	  }
    	  	  }
    	  }
    	for (int i=1;i<=n;i++)
    	  {
    	  	for (int j=1;j<=n-1;j++)
    	  	  cout<<a[i][j]<<' ';
    	  	cout<<a[i][n]<<endl;
    	  }
        return 0;
    }
    

    博客结束

    展开全文
  • C语言输出蛇形方阵,编程初学者思维借鉴。
  • 蛇形方阵 C语言

    2021-10-27 18:32:53
    给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 输入 4 输出 1 2 3 4 12 13 14 5 11 16 ...

    题目描述
    给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。

    从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。

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

    思路:
    方式1. 题目数据范围实在是太小了,可以直接采用打表的方式.
    方式2. 矩阵依次是1 ~ n*n 的数, 从左往右,从上往下,再从右往左,下往上.
    所以只要循环的方式可以实现"蛇形"就可以得到答案.

    循环遍历的方式

    Copy 方式 2 :

    #include<stdio.h>
    int a[10][10];    //这里定义全局变量,默认数组每个元素初始化为 0 
    int main(){
    	int n;
    	int k = 0; // 蛇形走位的初始值,每次循环成功 ++k; 
    	scanf("%d",&n);	
    	int x = 1,y = 0; 
    
    	while( k < n*n){
    		 
    		 // a[x][y+1] 是目标位置 
    		//从左往右 , 判断如果没有超过边界并且目标位置没有被覆盖过则可以进行赋值 
    		while( y < n  && a[x][y+1] == 0 ) 
    		{  a[x][++y] = ++k;}	
    		
    		//从上往下 , 
    		while( x < n  && a[x+1][y] == 0  )
    		 { a[++x][y] = ++k;}
    		
    		//从右往左 
    		while( y > 1 && a[x][y-1] == 0  )
    		 {  a[x][--y] = ++k;}
    		
    		//从下往上 
    		while( x > 1  && a[x-1][y] == 0  )
    		 {  a[--x][y] = ++k;}
    	
    		
    	}
    
    	for(int i = 1; i<= n; i++){
    		for(int j = 1; j <= n; j++){
    			printf("%3d",a[i][j]); 
    		} 
    		printf("\n"); 
    	}  
    	return 0;
    } 
    

    Copy 方式1:

    #include <iostream>
    using namespace std;
    int n;
    int main () {
    	cin >> n;
    	if(n == 1)
    		cout << "  1\n";
    	if(n == 2)
    		cout <<"  1  2\n  4  3\n";
    	if(n == 3) {
    		cout << "  1  2  3\n";
    		cout << "  8  9  4\n";
    		cout << "  7  6  5\n";
    	}
    	if(n == 4) {
    		cout << "  1  2  3  4\n";
    		cout << " 12 13 14  5\n";
    		cout << " 11 15 16  6\n";
    		cout << " 10  9  8  7\n";
    	}
    	if(n == 5) {
    		cout << "  1  2  3  4  5\n";
    		cout << " 16 17 18 19  6\n";
    		cout << " 15 24 25 20  7\n";
    		cout << " 14 23 22 21  8\n";
    		cout << " 13 12 11 10  9\n";
    	}
    	if(n == 6) {
    		cout << "  1  2  3  4  5  6\n";
    		cout << " 20 21 22 23 24  7\n";
    		cout << " 19 32 33 34 25  8\n" ;
    		cout << " 18 31 36 35 26  9\n";
    		cout << " 17 30 29 28 27 10\n";
    		cout << " 16 15 14 13 12 11\n";
    	}
    	if(n == 7) {
    		cout << "  1  2  3  4  5  6  7\n";
    		cout << " 24 25 26 27 28 29  8\n";
    		cout << " 23 40 41 42 43 30  9\n";
    		cout << " 22 39 48 49 44 31 10\n";
    		cout << " 21 38 47 46 45 32 11\n";
    		cout << " 20 37 36 35 34 33 12\n";
    		cout << " 19 18 17 16 15 14 13\n";
    	}
    	if(n == 8) {
    		cout << "  1  2  3  4  5  6  7  8\n";
    		cout << " 28 29 30 31 32 33 34  9\n";
    		cout << " 27 48 49 50 51 52 35 10\n";
    		cout << " 26 47 60 61 62 53 36 11\n";
    		cout << " 25 46 59 64 63 54 37 12\n";
    		cout << " 24 45 58 57 56 55 38 13\n";
    		cout << " 23 44 43 42 41 40 39 14\n";
    		cout << " 22 21 20 19 18 17 16 15\n";
    	}
    	if(n == 9) {
    		cout << "  1  2  3  4  5  6  7  8  9\n";
    		cout << " 32 33 34 35 36 37 38 39 10\n";
    		cout << " 31 56 57 58 59 60 61 40 11\n";
    		cout << " 30 55 72 73 74 75 62 41 12\n";
    		cout << " 29 54 71 80 81 76 63 42 13\n";
    		cout << " 28 53 70 79 78 77 64 43 14\n";
    		cout << " 27 52 69 68 67 66 65 44 15\n";
    		cout << " 26 51 50 49 48 47 46 45 16\n";
    		cout << " 25 24 23 22 21 20 19 18 17\n";
    	}
    	return 0;
    }
    
    展开全文
  • 和教材上不一样的写法,自己写的蛇形方阵的代码。谢谢!
  • 蛇形方阵(C++)

    2021-05-05 14:17:40
    给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。 注意每个数字有都会占用 3 个字符,前面使用空格补齐。 样例输入 4 样例输出 1 2 3 4 5 6 7...

    题目描述
    给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。
    从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。
    注意每个数字有都会占用 3 个字符,前面使用空格补齐。
    样例输入

    4
    

    样例输出

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

    下面附上C++代码:

    #include <iostream>
    #include <iomanip>
    #define ll long long
    using namespace std;
    
    ll s[1000][1000];
    
    int main()
    {
    	int n, i = 1, j = 0, sum = 1;
    	cin >> n;
    	while (sum <= n * n)
    	{
    		while (s[i][++j] == 0 && j <= n)
    		{
    			s[i][j] = sum++;
    		}
    		j--;
    		while (s[++i][j] == 0 && i <= n)
    		{
    			s[i][j] = sum++;
    		}
    		i--;
    		while (s[i][--j] == 0 && j >= 1)
    		{
    			s[i][j] = sum++;
    		}
    		j++;
    		while (s[--i][j] == 0 && i >= 1)
    		{
    			s[i][j] = sum++;
    		}
    		i++;
    	}
    	for (i = 1; i <= n; i++)
    	{
    		for (j = 1; j <= n; j++)
    		{
    			cout << setw(3) << setfill(' ') << s[i][j];
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
    展开全文
  • c语言之蛇形方阵2

    2021-11-18 16:02:44
    编写程序,将1到n*n之间的每个整数,从1开始,按照顺序依次填入到n阶蛇形方阵(具体见样例)。 输入 在一行中给出一个正整数N(<100)。 输出 输出N×N的蛇形方阵。每行N个数字,每个数字占5位。 输入...

    描述

    编写程序,将1到n*n之间的每个整数,从1开始,按照顺序依次填入到n阶蛇形方阵(具体见样例)。

    输入

    在一行中给出一个正整数N(<100)。

    输出

    输出N×N的蛇形方阵。每行N个数字,每个数字占5位。

    输入样例 1 

    5

    输出样例 1

        1    2    6    7   15
        3    5    8   14   16
        4    9   13   17   22
       10   12   18   21   23
       11   19   20   24   25

    输入样例 2 

    6

    输出样例 2

        1    2    6    7   15   16
        3    5    8   14   17   26
        4    9   13   18   25   27
       10   12   19   24   28   33
       11   20   23   29   32   34
       21   22   30   31   35   36

    #include<stdio.h>
    int main(int argc,char const*argv[])
    {
        int n,s=1;
        scanf("%d",&n);
        int a[100][100]={0};
        int i=0, j=0;
        int ni,nj,k=1,z=1;

      while(s<=n*n)
      {    while(i>=0&&j<=n-1)
          {a[i][j]=s;
          ni=i,nj=j;
          i--,j++;
          s++;}
          if(s<=n*n)
        {      i=ni,j=nj;
               if(z<n)
               {i=0;
               j=nj+k;
                }
             else
            {  k=z;
               j=n-1;
               i=k+1-n;
            }
            z++;

            while(j>=0&&i<=n-1)
            {  a[i][j]=s;
                ni=i,nj=j;
                i++,j--;
                s++;
            }
          if(s<=n*n)
           {
               if(z<n)
               {i=ni+k;
                j=0; }
              else
             {   k=z;
               j=k+1-n;
               i=n-1;

             }
             z++;

            }

        }

      }
      for(i=0;i<n;i++)
      {
          for(j=0;j<n;j++)
          {
              printf("%5d",a[i][j]);
          }
          printf("\n");
      }


    }
    设置2个循环进行嵌套,进行衔接。z与k2个量进行代换

    展开全文
  • 蛇形矩阵
  • 输入一个正整数 n,生成一个 n×n 的蛇形方阵(具体见样例)。 输入 一行一个正整数 n,1≤n≤20。 输出 共 n 行,每行 n 个正整数,每个正整数占 5 列。 样例输入Copy 5 样例输出Copy 1 2 6 7 15 3 5 ...
  • 习6】蛇形方阵 题目描述 给出一个不大于 9 的正整数 nn,输出 n\times nn×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 输入...
  • 习6】蛇形方阵给出一个不大于 9 的正整数 \(n\),输出 \(n\times n\) 的蛇形方阵。从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。无无输入 #14...
  • n*n蛇形方阵的输出

    千次阅读 2020-12-09 16:33:09
    输入一个正整数 n,生成一个 n×n 的蛇形方阵。 输入 一行一个正整数 n,1≤n≤20。 输出 共 n 行,每行 n 个正整数,每个正整数占 5 列。 样例输入 5 样例输出 输入的方向跟副对角线平行 难点在于每次输入的方向会...
  • 给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 这题我还没搞懂,以下是借鉴一个大佬的...
  • P5731 蛇形方阵 题目描述 给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 输入格式 无 ...
  • 输入一个正整数n,生成一个n×n的蛇形方阵(具体见样例)。 输入 一行一个正整数n,1≤n≤20 输出 共n行,每行n个正整数,每个正整数占5列。 样例输入Copy 5 样例输出Copy 15 7 6 2 1 16 14 8 5 3 22 ...
  • 给出一个不大于 9 的正整数 n,输出 n×n的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 输入格式 无 输出格式 无 输入 #1 4 输出...
  • 在n*n方陈里填入1,2,...,n*n,要求填成蛇形。 例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 直接输入方陈的维数,即n的值(n<=100) 输出结果是蛇形方陈 #include <stdio.h> #include ...
  • } 洛谷-蛇形方阵 题目描述 给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 输入格式 无...
  • (即安什么便准来定义方阵的边长?)追问:只是要求打印如下方阵追答:#include#include void right(int i,int j,int n); //向右输入void down(int i,int j,int n); //向下输入void left(int i,int j,int n); //向左...
  • java 程序 蛇形方阵

    2011-09-04 22:05:16
    二维数组中,数字从左上角已s形输出。 原则上,斜线上下标的数值和相等。 基本如此,很简单的程序
  • 27 蛇形方阵

    2020-05-16 21:11:28
    27 蛇形方阵 作者: Turbo时间限制: 1S章节: 二维数组 问题描述 : 输出一个如下的n阶方阵。例如,若读入11,则输出: 无标题.png 输入说明 : 输入一个正整数n(n<20),表示需要输出n阶方阵。 输出说明 : 共输出n行...
  • 信息学奥赛C++语言: 蛇形方阵1

    千次阅读 2020-02-08 17:50:10
    输入一个正整数 n,生成一个 n×n 的蛇形方阵(具体见样例)。 【输入】 一行一个正整数 n,1≤n≤20。 【输出】 共 n 行,每行 n 个正整数,每个正整数占 5 列。 【输入样例】 5 【输出样例】 代码 ...
  • 习6】蛇形方阵 题目描述 给出一个不大于 9 的正整数 n,输出n×n 的蛇形方阵。 从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。 输入 4 输出 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,098
精华内容 439
关键字:

蛇形方阵