螺旋矩阵

kongmeijiing 2012-03-13 01:00:39
设计用从左上角开始,按顺时针于填充n阶方阵的上三角区域的程序,填充规则是:使用1,2,3,4.。。的自然数列。例如:输入5
则输出例如:1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
请求带有注释的详细代码
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-03-17
  • 打赏
  • 举报
回复
参考:
C++面试题:循环数列问题

应该就是楼主想要的
尘缘udbwcso 2012-03-17
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
void getData(int **data, int n)
{
int i = 0, j = 0, k;
int num = 1, count = n;
do
{
for(k = 0; k < count; ++k)
{
data[i][j++] = num++;
}
--count;
--j;
for(k = 0; k < count; ++k)
{
data[++i][--j] = num++;
}
--count;
for(k = 0; k < count; ++k)
{
data[--i][j] = num++;
}
--count;
++j;
}while(count > 0);
}
void printData(int **data, int n)
{
int i, j;
for(i = 0; i < n; ++i)
{
for(j = 0; j < n; ++j)
{
printf("%4d", data[i][j]);
}
printf("\n");
}
}
int main()
{
int **data, n, i, j;
scanf("%d", &n);
data = (int**)malloc(sizeof(int*)*n);
for(i = 0; i < n; ++i)
data[i] = (int*)malloc(sizeof(int)*n);
for(i = 0; i < n; ++i)
{
for(j = 0; j < n; ++j)
{
data[i][j] = 0;
}
}
getData(data, n);
printData(data, n);
for(i = 0; i < n; ++i)
free(data[i]);
free(data);
system("pause");
return(0);
}

JackBurd 2012-03-15
  • 打赏
  • 举报
回复
这种题就是要考虑循环变量的边界问题,仔细分析(毎转一圈时每行每列每斜列的元素个数及下标变化)规律就可以写出程序来,我前几天写的,花了我有会儿时间了,希望对你有帮助。

#include<stdio.h>

#define N 9

void main()
{
int a[N][N] = {1};

for(int i = 0, sum = 1; sum <= N; sum += 2+i, i++) //这是控制“转几圈”的循环变量
{
for(int j = i; j < N-2*i; j ++)
{
if(j == 0) continue; //防止第一次a[j-1]数组越界,以后不会有此情况了。
a[i][j] = a[i][j-1] + 1; //这是横着的那一列的依次赋值
}

for(int k = i+1; k < N-2*i; k ++)
{
a[k][N-1-k-i] = a[k-1][N-i-k] + 1; //这是斜着那一列的依次赋值
} //斜列规律是行列下标和为n-1-i

for(int n = N-2*i-2; n >= i+1; n--)
{
a[n][i] = a[n+1][i] + 1; //这是竖直向上那一列的依次赋值
}
}

for(int row = 0; row < N; row ++)
{
for(int col = 0; col < N-row; col ++)
{
printf("%d\t",a[row][col]);
}
printf("\n\n\n");
}
}


fxiangyoung 2012-03-15
  • 打赏
  • 举报
回复
找数学规律的问题
赵4老师 2012-03-13
  • 打赏
  • 举报
回复
把自己想象成一只蚂蚁,在NxN的格子里面爬一遍。(^_^)
kongmeijiing 2012-03-13
  • 打赏
  • 举报
回复
上面排版有点问题
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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