| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2095 人关注过本帖, 1 人收藏
标题:螺旋方阵
只看楼主 加入收藏
llllyyy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-4-9
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
螺旋方阵
如何用c语言输出一个螺旋方阵,新手,尽量简单点,带点解释更好,麻烦大家了
搜索更多相关主题的帖子: c语言 如何 
2017-04-09 15:00
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
程序代码:
#include"stdafx.h"
#include <stdio.h>
#define N 100
int Matrix[N][N] = {0};

enum direction{top, bottom, left, right};//螺旋着跑的方向

void printMatrix(int n){           //打印方阵
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d\t", Matrix[i][j]);
        }
        printf("\n");
    }
}

bool isOver(int i, int j, int n){  //是否符合结束条件
    bool tag = true;
    if(j < n-1 && Matrix[i][j + 1] ==0)
        tag = false;
    if(j > 0 && Matrix[i][j - 1] ==0)
        tag = false;
    if(i < n-1 && Matrix[i + 1][j] ==0)
        tag = false;
    if(i > 0 && Matrix[i - 1][j] ==0)
        tag = false;

    return tag;
}

void logicalOperation(int n){      //对方阵逻辑操作
    direction flag = right;
    int i = 0, j = 0, data = 1;
    while(true){

        Matrix[i][j] = data;

        switch(flag){
        case right:
            {
                if(j == n - 1 || Matrix[i][j + 1] != 0){
                    i++;
                    flag = bottom;
                }
                else j++;
            }
            break;
        case bottom:
            {
                if(i == n - 1 || Matrix[i + 1][j] != 0){
                    j--;
                    flag = left;
                }
                else i++;
            }
            break;
        case left:
            {
                if(j == 0 || Matrix[i][j - 1] != 0){
                    i--;
                    flag = top;
                }
                else j--;
            }
            break;
        case top:
            {
                if(i == 0 || Matrix[i - 1][j] != 0){
                    j++;
                    flag = right;
                }
                else i--;
            }
            break;
        default:
            break;
        }

        data++;

        if(isOver(i, j, n)){
            Matrix[i][j] = data;
            break;
        }
    }
}

int main()
{
    int n;                         //n阶方阵
    printf("input N:");
    scanf("%d", &n);
    getchar();

    if(n < 1 || n > 100){
        printf("envalid number!\n");
        return 0;
    }

    logicalOperation(n);
    
    printMatrix(n);

    return 0;
}


就根据螺旋方阵的规律来写的,从外面往里面转,一个个给数据,笨方法,还没想到更好的

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2017-4-10 17:02编辑过]


三十年河东,三十年河西,莫欺少年穷!
2017-04-10 16:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
回复 2楼 韶志
r 版的代码短小精悍

https://bbs.bccn.net/viewthread.php?tid=474605&highlight=%C2%DD%D0%FD

DO IT YOURSELF !
2017-04-10 19:35
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:5 
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-04-10 22:20
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
机房电脑 不能上网,见谅!
2017-04-10 22:21
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:5 
这题可以这样来, 起始i=0是,数字一直往右走; 接着j=N-1时,数字一直往下走; 然后i=N-1时,数字一直往左走; 最后j=0时,数字就往上走了,注意当走到i=1,j=0一圈结束.
ok, 第二圈要开始了, 那么 i就要变化了,第二圈i=1 ,随后转换方向时的条件就要发生改变了.
程序代码:
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#define N 5

void travel(int arr[][N]);

int main(void)
{
    int arr[N][N] = { 0 };
    int i, j;
    travel(arr);

    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%-3d", arr[i][j]);
        printf("\n");
    }
    system("pause");

    return 0;
}

void travel(int arr[][N])
{

    int i = 0, j = 0;
    int count = 1;
    int y = N - 1, x = 0;
    while (1)
    {
        arr[i][j] = count++;
        //printf("%4d, i=%d, j=%d\n", arr[i][j], i, j);
        if (arr[i][j] == N*N)
            break;
    
        else if (i == x && j<=y-1)   //向右移动
            j++;
        
        else if (j == y && i <= y - 1)  //向下移动
            i++;
        
        else if (i == y && j >= x+1)   //向左移动
            j--;
        
        else if (j==x && i>=x+2)   //向上移动, 一圈结束
            i--;

        else if (i == j + 1)       //一圈结束后, y--, x++理解
        {
            j++;
            y--;
            x++;
        }
        
    }

    return;
}

早知做人那么辛苦!  当初不应该下凡
2017-04-11 00:29
快速回复:螺旋方阵
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020142 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved