| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2824 人关注过本帖
标题:别人出的一道题(数字螺旋阵排版问题)
只看楼主 加入收藏
wonderfulday
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2004-7-28
收藏
 问题点数:0 回复次数:12 
别人出的一道题(数字螺旋阵排版问题)

打印出具有下列规律的矩阵图

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

[此贴子已经被kai于2004-07-30 23:56:51编辑过]

搜索更多相关主题的帖子: 螺旋 数字 排版 打印 矩阵 
2004-07-29 19:37
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 
螺旋矩阵,这些基础问题你应该到C语言教室去讨论

我的主页 http://www.
2004-07-30 18:52
kuangjingbo
Rank: 1
等 级:新手上路
帖 子:312
专家分:0
注 册:2004-4-24
收藏
得分:0 

哇,楼上的你挖墙角!哼,不厚道!!

楼主:方法很多,给你一个比较笨的方法:

void main()

{

int i,j;

int array[][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}};

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

cout<<array[i][j]<<" ";

cout<<endl;

}

}


永不放弃!
2004-07-30 20:19
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

2 楼的确有挖墙脚的味道,我已经好久没在C 语言板块发言了,为的就是坚守C++ 阵地。

C++ 板块要做好,靠的就是大家来提供好的程序代码。

C, C++ 没有实际意义上的界限。当然C, C++ 的思维方式是不一样的。

言归正传,这道题是关于数字螺旋式布阵,并打印出来的问题。它可以扩展为 N * N 的阵型。记得以前做过,并在C 语言板块给出了答案,不过我找了一下,没有找到。我也没有耐心一个一个去找了。

我想一下,有了答案再给大家。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-07-30 23:15
wonderfulday
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2004-7-28
收藏
得分:0 

#include<stdio.h> #include<iostream.h>

#define SIZE 8 #define ALL SIZE*SIZE

static int x;

class round{ public: char point; int i; void set_r(){point='r';} void set_d(){point='d';} void set_l(){point='l';} void set_u(){point='u';}

};

round a[SIZE][SIZE];

main() { int i,k,j; for(i=0;i<SIZE/2;i++){ a[i][i].set_r(); a[i+1][i].set_r(); a[SIZE-i-1][SIZE-i-1].set_l(); a[SIZE-i-1][i].set_u(); a[i][SIZE-i-1].set_d(); }

x=1; i=0; j=0; do{ while(a[i][j].point=='r'||a[i][j].point==NULL){ a[i][j].i=x; x++; j++; } while(a[i][j].point=='d'||a[i][j].point==NULL){ a[i][j].i=x; x++; i++; } while(a[i][j].point=='l'||a[i][j].point==NULL){ a[i][j].i=x; x++; j--; } while(a[i][j].point=='u'||a[i][j].point==NULL){ a[i][j].i=x; x++; i--; }

}while(x!=ALL+1);

for(i=0;i<SIZE;i++){ for(k=0;k<SIZE;k++){ printf("%4d",a[i][k].i); } printf("\n"); }

return 0; }


2004-07-30 23:31
wonderfulday
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2004-7-28
收藏
得分:0 

我做了很久,我知道这不是一个好的方法

也有错,就是不能显示奇数的矩阵,望高手指点


2004-07-30 23:34
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

#include <iostream> #include <cstdlib> #include <cstring> #include <iomanip> using namespace std;

int main() { const int MAX = 20; int i = 0, j = 0; int N = 0; int num[MAX][MAX]; for(; i<MAX; i++) memset(&num[i][0], 0, MAX*sizeof(int)); cout<<"Please set the N value for a N*N place\n"; cout<<"N = "; cin>>N; int max = N*N; int number = 1; i = 0; j = 0; num[i][j] = number; bool rand = true;; bool forwards = true; bool down = false; bool back = false; bool up = false;

while(number<max) { if(forwards) { j++; if(num[i][j] == 0) { number++; num[i][j] = number; if(num[i][j+1]||number==N) { forwards = false; down = true; } } } else if(down) { i++; if(num[i][j] == 0) { number++; num[i][j] = number; if(num[i+1][j]||number==2*N-1) { down = false; back = true; } } } else if(back) { j--; if(num[i][j] == 0) { number++; num[i][j] = number; if(j == 0||num[i][j-1]||number==3*N-2) { back = false; up = true; } } } else if(up) { i--; if(num[i][j] == 0) { number++; num[i][j] = number; if(num[i-1][j]) { up = false; forwards = true; } } } } for(i = 0; i<N; i++) { for(j = 0; j<N; j++) { cout.width(3); cout<<setiosflags(ios::left); cout<<num[i][j]<<" "; } cout<<endl; } system("pause"); return 0; }


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-07-31 02:32
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 

呵呵,我没有挖墙角的意思,只是我觉得这种主要是算法的问题,用不到C++的类啊,继承啊等等特性,用C就足够了。

因为一般算法书上都是C语言啊,我没有别的意思啊,不要打我啊


我的主页 http://www.
2004-07-31 09:06
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 

jzh2004,

欢迎你来C++ 板块,说你挖墙脚,只是一句玩笑话阿,不必挂在心上。C板块比C++板块热闹的多,大家都是看到的。我想这与学习C语言的人比较多有关。不过随着论坛的人越来越多起来,C++板块也会越来越热闹起来的。

说到算法,我不能同意你的观点。我认为,算法是独立于任何一门语言的解题思路,C 需要算法,C++ 也需要算法,java 也不能没有算法,其余的语言的也同样需要算法。

只是,C, C++他们的思维方式不同罢了。C++ 区别于C主要是因为C++ 提供的OOP 机制。 在OOP 方面,Java更向前走了一步。OOP 提出了这么一个思想,任何一类Object 都有其专有的特性,另外其应该有作用于其他对象,以及其他对象作用于他的方法。那么我们就可以通过创建对象来模拟事务的进程。

如果你用java 编程,却依然是过程化编程,那么这肯定是不好的习惯。但还是有很多人会写出过程化的程序。这点在C++ 编程中尤为普遍,原因是什么?因为太多的朋友是先学了C, C过程化编程的思想对他影响太大。我并没有批评或指责C的意思。我只是要强调C,C++ 有着他们不同的思维方式。

这里由于是C++板块,我尽量追求C++的风格。当然有朋友来求C风格的代码,一样是可以的。C++ 本身也并非完全是OOP 编程语言。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2004-07-31 09:59
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 

哈哈,我知道是开玩笑啦,你说的不错啊,我C用的太久了,C++也生疏了,我以后会多用面向对象的方法来思考,以后还要多向你们学习啊


我的主页 http://www.
2004-07-31 12:31
快速回复:别人出的一道题(数字螺旋阵排版问题)
数据加载中...
 
   



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

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