2 visual studio1 VISUAL_STUDIO1 于 2016.01.30 22:03 提问

C++蛇形填数问题, 输出有问题

以下是代码,麻烦大神看一下有没有错
输入:n = 4;
结果:14 15 16 1
0 0 0 2
0 0 0 3
7 6 5 4

 #include <iostream>
#include <iomanip>
#define maxn 20
using namespace std;
int str[maxn][maxn];
int main()
{
    cout << "输入方阵:";
    int n;
    cin >> n;
    int x = 0, y = n - 1, tot = 1;
    memset(str,  0,  sizeof(str));
    str[0][n - 1] = 1;
    while (tot < n * n)
    {
        while (x+1< n  && str[x+1][y] == 0)
            str[++x][y] = ++tot;//down move
        while (y+1>= 0 && str[x][y-1] == 0)
            str[x][--y] = ++tot;//left move
        while (x - 1 >= 0 && str[x - 1][y] == 0)
            str[--x][y] = ++tot;//up move
        while (y + 1 < n  && str[x][y + 1] == 0)
            str[x][++y] = ++tot;
    }
    for (x = 0; x < n; x++)
    {
        for (y = 0; y < n; y++)
            cout << setw(5) << str[x][y];
        cout << endl;
    }
    system("pause");
    return 0;
}

1个回答

caozhy
caozhy   Ds   Rxr 2016.01.30 23:26
已采纳
 #include <iostream>
#include <iomanip>
#define maxn 20
using namespace std;
int str[maxn][maxn];
int main()
{
    cout << "输入方阵:";
    int n;
    cin >> n;
    int x = 0, y = n - 1, tot = 1;
    memset(str,  0,  sizeof(str));
    str[0][n - 1] = 1;
    while (tot < n * n)
    {
        while (x+1< n  && str[x+1][y] == 0)
            str[++x][y] = ++tot;//down move
        while (y-1>= 0 && str[x][y-1] == 0) //修改
            str[x][--y] = ++tot;//left move
        while (x - 1 >= 0 && str[x - 1][y] == 0)
            str[--x][y] = ++tot;//up move
        while (y + 1 < n  && str[x][y + 1] == 0)
            str[x][++y] = ++tot;
    }
    for (x = 0; x < n; x++)
    {
        for (y = 0; y < n; y++)
            cout << setw(5) << str[x][y];
        cout << endl;
    }
    system("pause");
    return 0;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【经典算法】:蛇形填数,最简单的方法了。。。
问题概述什么是蛇形填数,百度一下即可 解法你能发现这里面的数为1到 n*n; 所以写个循环即可while(count<n*n){ while(x+1<n && !a[x+1][y]) a[++x][y]=++count;//右下 while(y-1>=0 &&!a[x][y-1]) a[x][--y]=++count;//向左 while(x-1>
Python第五次作业
                                                                  Python第五次作业                                                                                                                           ...
VC++6.0导入pthread库配置流程
一、前言 Pthread线程库基于POSIX标准,因此是可移植和跨平台的。无论是Windows还是Linux,使用方法一致。下面介绍如何将pthread库导入VC++6.0的IDE环境。 二、配置流程 1、首先到ftp://sourceware.org/pub/pthreads-win32下载到pthread库资源,一个完整的资源包会包含如下文件夹:Pre-built.2、pthreads.
acm蛇形填数
描述 在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 输出输出结果是蛇形方陈。 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 思路:         若输入3,则矩阵最大数为3*3
EXP-00091: 正在导出有问题的统计信息 错误解决
EXP-00091: 正在导出有问题的统计信息。 EXP-00091: 正在导出有问题的统计信息。 . . 正在导出表 JC_WEBSERVICE_PARAM导出了 0 行 EXP-00091: 正在导出有问题的统计信息。 EXP-00091: 正在导出有问题的统计信息。 . . 正在导出表 JC_WORKFLOW
EXP-00091 正在导出有问题的统计信息
出现上面的情况一般都是服务端与客户端的编码不同导致的。 sqlplus db_user/123@test 登录进去,执行 SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; 可以得到服务端的编码,例如:AL32UTF8 我这里用的是临时设定环境变量,即: set NLS_LANG=SIMPLIFI
C语言蛇形填数
思路就是:右-》下-》左-》上#include<stdio.h> #include<string.h> int a[10][10]; int main() { int i,j, n, num=0; memset(a, 0, sizeof(a)); scanf("%d", &n); num=a[i=0][j=0]=1; while(num < n*n)
C 【for循环嵌套 图形规律 问题】
/* 外循环控制行数 内循环控制列数 输出 类正三角(尖尖朝上):修改内循环的 条件 表达式 输出 类倒三角(尖尖朝下):修改内循环的 初始化 表达式 */ #include #include void test1(); void test2(); int main(int argc, const char * argv[]) { // test1(); /
EXP-00091: 正在导出有问题的统计信息。/exp导出报错
C:\Documents and Settings\Administrator>exp system/oracle@BO file=d:\full.dmp full=y EXP-00091: 正在导出有问题的统计信息。 查看oracle server端的字符集 SQL> select userenv('language') from dual; USERENV('LANGUAGE'
C语言 蛇形填数
蛇形填数。在n×n方阵里填入1,2,…,n×n,要求填成蛇形。例如,n=4时方阵为:10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4解决此题的一个重要原则就是先判断下一个要填的位置是否满足条件,再填数。不是发现了不能填再退回来。代码如下:#include <stdio.h> #include <string.h> #define MAXN 100 int ma