C++图形输出问题

lengmozaixian 2008-12-21 06:01:31
编程实现输出以下图形:
n=1 1
4 5 2
3
n=2 1 2
8 9 10 3
7 12 11 4
6 5
n=3 1 2 3
12 13 14 15 4
11 20 21 16 5
10 19 18 17 6
9 8 7
n=4 1 2 3 4
16 17 18 19 20 5
15 28 29 30 21 6
14 27 32 31 22 7
13 26 25 24 23 8
12 11 10 9
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiyaa 2008-12-21
  • 打赏
  • 举报
回复
学习
星羽 2008-12-21
  • 打赏
  • 举报
回复


#include "stdafx.h"

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

enum {lft, up, rigt, down};

int main()
{
int n = 0;

cout<<"n = ";
cin>>n;

int m = n + 2;
int* data = new int[m * m];
int x = 0;
int y = 1;
int v = 1;
int f = rigt;

memset(data, 0, sizeof(int) * m * m);

while (data[x * m + y] == 0)
{
data[x * m + y] = v++;

switch (f)
{
case lft :
{
if (data[x * m + y - 1] != 0 || y == 0 || (x == m - 1 && y == 1))
{
if (x == m - 1 && y == 1)
--y;
--x;
f = up;
}
else
--y;
}
break;
case up :
{
if (data[(x - 1) * m + y] != 0 || x == 0 || (x == 1 && y == 0))
{
++y;
f = rigt;
}
else
--x;
}
break;
case rigt :
{
if (data[x * m + y + 1] != 0 || y == m - 1 || (x == 0 && y == m - 2))
{
if (x == 0 && y == m - 2)
++y;
++x;
f = down;
}
else
++y;
}
break;
case down :
{
if (data[(x + 1) * m + y] != 0 || x == m - 1 || (x == m - 2 && y == m - 1))
{
if (x == m - 2 && y == m - 1)
++x;
--y;
f = lft;
}
else
++x;
}
break;
default :
break;
}
}

cout<<endl;

for (int x = 0; x < m; ++x)
{
for (int y = 0; y < m; ++y)
{
if ((x == 0 && y == 0) ||
(x == m - 1 && y == 0) ||
(x == 0 && y == m - 1) ||
(x == m - 1 && y == m - 1)
)
cout<<setw(3)<<" ";
else
cout<<setw(3)<<data[x * m + y];
}
cout<<endl;
}

delete data;

return 0;
}

-------------------


n = 4

1 2 3 4
16 17 18 19 20 5
15 28 29 30 21 6
14 27 32 31 22 7
13 26 25 24 23 8
12 11 10 9


n = 8

1 2 3 4 5 6 7 8
32 33 34 35 36 37 38 39 40 9
31 60 61 62 63 64 65 66 41 10
30 59 80 81 82 83 84 67 42 11
29 58 79 92 93 94 85 68 43 12
28 57 78 91 96 95 86 69 44 13
27 56 77 90 89 88 87 70 45 14
26 55 76 75 74 73 72 71 46 15
25 54 53 52 51 50 49 48 47 16
24 23 22 21 20 19 18 17













jieao111 2008-12-21
  • 打赏
  • 举报
回复
用c++做,可惜了
liubuweiright 2008-12-21
  • 打赏
  • 举报
回复
up
太乙 2008-12-21
  • 打赏
  • 举报
回复
int n ;
int num;
int cols = 1, rows = 0;
while (num != (n+2)*(n+2)-4)
{
arr[rows][cols] = num;
决定rows,cols;
num++;
}
glacier3d 2008-12-21
  • 打赏
  • 举报
回复
n^2+4n个数转圈,
直观的方法:分配各2维数组,利用i、j两个索引的不断变换,转圈填入数字即可
arong1234 2008-12-21
  • 打赏
  • 举报
回复
这种题目要是教你可不是害了你?作业还是自己做吧

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧