| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 829 人关注过本帖
标题:怎么不使用数组编译一个这样的螺旋方阵?
只看楼主 加入收藏
姚2014021
Rank: 2
等 级:论坛游民
帖 子:14
专家分:15
注 册:2014-11-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
怎么不使用数组编译一个这样的螺旋方阵?
设计目标:输入一个数n,输出一个n*n的螺旋方阵:
eg:输入:5
输出:
1   2   3   4   5
16  17  18  19  6
15  24  25  20  7
14  23  22  21  8
13  12  11  10  9
2014-11-17 23:20
姚2014021
Rank: 2
等 级:论坛游民
帖 子:14
专家分:15
注 册:2014-11-10
收藏
得分:0 
我有想过用四个for结构进行嵌套或者并列,但是都失败了。毕竟我还是新手,希望能有高手给点建议。指条明路。
2014-11-17 23:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:7 
程序代码:
#include <iostream>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::vector;

int main(void)
{

    int n = 0;
    cin >> n;
    vector<vector<int>> ivec(n ,vector<int>(n, 0));
    int dir = 1;
    int x = 0;
    int y = 0;
    int i = 1;
    for (i = 1; i <= n*n;)
    {
        switch (dir)
        {
        case 1:
            for (;y != n; ++y)
            {
                if (ivec[x][y] != 0)
                    break;
                ivec[x][y] = i++;
                // cout << "(" << x << ", " << y << ") = " << i-1 << endl;
            }
            --y;
            ++x;
            ++dir;
            break;
        case 2:
            for (;x != n; ++x)
            {
                if (ivec[x][y] != 0)
                    break;
                ivec[x][y] = i++;
                // cout << "(" << x << ", " << y << ") = " << i-1 << endl;
            }
            --x;
            --y;
            ++dir;
            break;
        case 3:
            for (;y >= 0; --y)
            {
                if (ivec[x][y] != 0)
                    break;
                ivec[x][y] = i++;
                // cout << "(" << x << ", " << y << ") = " << i-1 << endl;
            }
            ++y;
            --x;
            ++dir;
            break;
        case 4:
            for (;x >= 0; --x)
            {
                if (ivec[x][y] != 0)
                    break;
                ivec[x][y] = i++;
                // cout << "(" << x << ", " << y << ") = " << i-1 << endl;
            }
            ++x;
            ++y;
            dir = 1;
            break;
        default:
            break;
        }
    }
    for (x = 0; x != n; ++x)
    {
        for (y = 0; y != n; ++y)
            cout << ivec[x][y] << "\t";
        cout << endl;
    }
    return 0;
}


GCC 4.9.2 编译的

g++ -Wall -std=c++11 a.cpp -lm -o a
2014-11-18 00:42
姚2014021
Rank: 2
等 级:论坛游民
帖 子:14
专家分:15
注 册:2014-11-10
收藏
得分:0 
回复 3 楼 zklhp
你这个在生成.obj文件时就报错了。
2014-11-18 10:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
回复 4 楼 姚 2014021
vs下编译并运行 无任何问题

DO IT YOURSELF !
2014-11-18 11:09
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用姚2014021在2014-11-18 10:44:33的发言:

你这个在生成.obj文件时就报错了。

低版本VS可能有问题 我编译的时候开了C++11支持

试了试 如果不开C++11支持容器定义会报错 如果你的编译器不支持C++11 我也不说什么了


[ 本帖最后由 zklhp 于 2014-11-18 12:31 编辑 ]
2014-11-18 12:19
姚2014021
Rank: 2
等 级:论坛游民
帖 子:14
专家分:15
注 册:2014-11-10
收藏
得分:0 
回复 6 楼 zklhp
作为初学者。我用的是VC++6.0
2014-11-18 20:38
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用姚2014021在2014-11-18 20:38:31的发言:

作为初学者。我用的是VC++6.0

我举个栗子 可能不恰当

学开车 自然要学开现代的车 干嘛非要学那个已经淘汰的车
2014-11-18 21:08
快速回复:怎么不使用数组编译一个这样的螺旋方阵?
数据加载中...
 
   



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

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