zoukankan      html  css  js  c++  java
  • 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 3
    6 1 2
    7 8 9
    25

    第二部分:思路

    思路:从中心位置开始,以逆时针方向“行走”,改变方向的条件是:当前位置的下一方向上没有走过,利用初始化数组为0,来判断,如果为0说明没有走过。
    其次需要稍微注意的是:在计算对角线上数字和的时候,因为中心位置的数字加了两次,所以要减去一个中心位置数字,也就是1。
    第三部分:代码
    #include<stdio.h>
    int main()
    {
    int n,i,j,dir=1,s[100][100]={0},sum=0;//dir表示方向,有1,2,3,4四个值,分别表示右、上、左,下 
    scanf("%d",&n);
    //中间位置 
    i=n/2;
    j=i;
    s[i][j]=sum++; //sum 表示当前所要填写的数字,中间位置肯定为1 
    //因为螺旋方向是逆时针,即:右->上->左->下,循环。
    //需要注意的是:方向改变的条件是下一方向上的位置没有走过,那么怎么判断呢?
    //利用初始化为0,只要不为0说明走过了。 
    while(sum<=n*n)
    {
    switch(dir)
    {
    case 1://向右走 
    {
    s[i][j++]=sum++;
    if(s[i-1][j]==0)
    {
    dir=2;
    }
    break; 
    }
    case 2://向上走 
    {
    s[i--][j]=sum++;
    if(s[i][j-1]==0)
    {
    dir=3;
    }
    break; 
    }
    case 3://向左走 
    {
    s[i][j--]=sum++;
    if(s[i+1][j]==0)
    {
    dir=4;
    }
    break; 
    }
    default://向下走 
    {
    s[i++][j]=sum++;
    if(s[i][j+1]==0)
    {
    dir=1;
    }
    break; 
    }
    }
    } 
    sum=0;
    //左上角到右下角和 
    i=0;
    while(i<n)
    {
    sum+=s[i][i];
    i++;
    } 
    //左下角到右上角和 
    i=n-1;
    j=0;
    while(i>=0)
    {
    sum+=s[i][j];
    i--;
    j++;
    } 
    //去掉一次对角线中相交处即中心数字。 
    sum-=s[n/2][n/2];
    for(i=0;i<n;i++)
    {
    for(j=0;j<n-1;j++)
    {
    printf("%d ",s[i][j]);
    }
    printf("%d
    ",s[i][j]);
    }
    printf("%d
    ",sum);
    return 0;
    }
    害怕失败的人,已经是一个loser!
  • 相关阅读:
    040 Android TCP协议的Socket通信
    039 Android SQLite数据库(了解)
    Navicat 连接Sqlite数据库的方法和步骤
    038 Android File文件存储功能
    037 Android SharedPreferences应用实例(记录App的使用次数)
    036 Android SharedPreferences(数据存储,需掌握)
    035 Android 广播(BroadCastReceiver)
    SharePoint2013打印列表项对象
    SharePoint2013所有列表绑定到DropDownList1中
    通过主机标头实现多个SharePoint Web应用程序共用一个端口(
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/5335222.html
Copyright © 2011-2022 走看看