codevs 1160 蛇形矩阵x

题目描述 Description

小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

输入描述 Input Description

n(即n行n列)

输出描述 Output Description

n+1行,n行为组成的矩阵,最后一行为对角线数字之和

样例输入 Sample Input

3

样例输出 Sample Output

5 4 3
6 1 2
7 8 9
25

数据范围及提示 Data Size & Hint

分类标签 Tags 点此展开

一定要注意 :这道题一开始走的方向是 fx=1 ;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5
 6 using namespace std;
 7
 8 int n,lastnum,sum,num=1;
 9 int jz[101][101];
10 int fx;//代表此时走的方向
11
12 void con(int nx,int ny)
13 {
14     fx=1;
15     memset(jz,0,sizeof(jz));
16     jz[nx][ny]=1;
17     while(num<lastnum)
18     {
19         if(fx==0)//向右走
20         {
21             nx++;
22             jz[nx][ny]=++num;
23             if(jz[nx][ny+1]==0)
24             {
25                 fx=1;//转变为向上走
26             }
27         }
28         else if(fx==1)//向上走
29         {
30             ny++;
31             jz[nx][ny]=++num;
32             if(jz[nx-1][ny]==0)
33             {
34                 fx=2;//转变为向左走
35             }
36         }
37         else if(fx==2)//向左走
38         {
39             nx--;
40             jz[nx][ny]=++num;
41             if(jz[nx][ny-1]==0)
42             {
43                 fx=3;//转变为向下走
44             }
45         }
46         else if(fx==3)//向下走
47         {
48             ny--;
49             jz[nx][ny]=++num;
50             if(jz[nx+1][ny]==0)
51             {
52                 fx=0;//转变为向右走
53             }
54         }
55     }
56 }
57
58 int main()
59 {
60     scanf("%d",&n);
61     lastnum=n*n;
62     int firstx=(n+1)/2;//因为n一定为奇数
63     int firsty=firstx;
64     con(firstx,firsty);
65     for(int i=1;i<=n;i++)
66     {
67         for(int j=1;j<=n;j++)
68         {
69             cout<<jz[i][j]<<" ";
70         }
71         cout<<endl;
72     }
73     for(int i=1;i<=n;i++)
74     {
75         for(int j=1;j<=n;j++)
76         {
77             if(i==j) sum+=jz[i][j];//位于对角线上点 点的特征
78             if(i+j==n) sum+=jz[i][j];
79         }
80     }
81     cout<<sum;
82     return 0;
83 }
时间: 2024-08-04 18:34:22

codevs 1160 蛇形矩阵x的相关文章

codevs 1160 蛇形矩阵

时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为对角线数字之和 样例输入 Sample Input 3

CODE[VS]1160 蛇形矩阵

题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为对角线数字之和 样例输入 Sample Input 3 样例输出 Sample Output 5 4 36

1160 蛇形矩阵(codevs)

http://codevs.cn/problem/1160/ 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为对角线数字之和 样例输入 Sample In

1160 蛇形矩阵

题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为对角线数字之和 样例输入 Sample Input 3 样例输出 Sample Output 5 4 36

1083 Cantor表&amp;&amp; 1160 蛇形矩阵

这种题目一般都是画出前进方向,然后找规律即可,要注意特殊情况的考虑 #include<stdio.h> #include<stdlib.h> int main() { int n,i,j,k,x,y,flag=0,sum=0; //建立动态数组 scanf("%d",&n); int **a; a=(int**)malloc(sizeof(int*)*n); if(a==NULL) { printf("Out of memory!\n"

(水题)蛇形矩阵

1160 蛇形矩阵 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为

蛇形矩阵

如上图所示,是一个4*4的蛇形矩阵 算法思路 由图可观察到该矩阵可分为上三角和下三角.每个三角要根据蛇形的奇偶行进行计数. 算法代码 #include <stdio.h> int main() { int a[10][10]; int n; printf("Input n:"); scanf("%d",&n); int i=0,j=0,k=0; int count=1; for(i=0;i<n;i++)/*上三角 i代表是蛇形的奇偶行*/

随便写的蛇形矩阵

[问题描述] 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. [要求] [数据输入]本题有多组数据,每组数据由一个正整数N组成.(N不大于100) [数据输出]对于每一组数据,输出一个N行的蛇形矩阵.两组输出之间不要额外的空行.矩阵三角中同一行的数字用一个空格分开.行尾不要多余的空格. [样例输入] 5 [样例输出] 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 /*作者:Yosha*/ #include "stdio.h" int main() {

Java编码 蛇形矩阵的构建与遍历输出

一.蛇形矩阵的构建,并按行输出 例: 输入:n, 生成n*n的蛇形矩阵 1 2 3 8 9 4 7 6 5 输出:1 2 3 8 9 4 7 6 5 java编码 public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n = in.nextInt(); if(n < 0) return; if(n == 1){ Sys