螺旋数组的c/c++实现

  本文内容由课本改动一些而成。
  螺旋数组中,对数组元素的赋值不是一行一行的,而是一圈一圈的,顺时针,由外向里。所有把所以的正方形圈圈都赋值完毕了,数组也就完成了。简单来讲,对于每一圈的四个顶点的坐标,在数组里的坐标,我们可以确定么?可以的。根据圈序号和数组大小,可以确定该圈的四个顶点的下标。同时,依此也确定了绘制四条边时的循环起始和终止值。同时也要做到4个循环连接时候的不重不漏,对数组赋值。
  代码如下,见名知意,很好理解:

#include<iostream>
using namespace std;
#define MAXWIDTH 10
#include<stdio.h>

void screwArray(int array[MAXWIDTH][MAXWIDTH],int arraySize) {
	int roundNumber = (arraySize % 2 == 0) ? arraySize / 2 : arraySize / 2 + 1;
	//对于每个圈,都是可以根据其圈序号确定其四个顶点的坐标的,
	//这也是绘制每个圈四条边时循环的起止点
	int rank, colomn,count = 0;
	for (int i = 0; i < roundNumber; i++) {
		// compute up  rank
		for (rank = i,colomn = i; colomn < arraySize - i; colomn++) { 
			count++;
			array[rank][colomn] = count;
		}	
		//compute right colomn
		for (rank = i + 1, colomn = arraySize - 1 - i;rank < arraySize - i;
			rank++) {
			count++;
			array[rank][colomn] = count;
		}
		//compute bellow rank
		for (rank = arraySize - 1 - i, colomn = arraySize - 2 - i;
			colomn >= i; colomn--) {
			count++;
			array[rank][colomn] = count;
		}
		//compute left colomn
		for (rank = arraySize - 2 - i, colomn = i; rank > i;rank--) {
			count++;
			array[rank][colomn] = count;
		}
	}
}

int main() {
	int array[MAXWIDTH][MAXWIDTH];
	int arraySize;

	cout << "input the array arraySize (<10): ";
	cin >> arraySize;

	screwArray(array,arraySize);

	cout << endl << "array is as follows :" << endl;
	for (int i = 0; i < arraySize; i++) {
		for (int j = 0; j < arraySize; j++)
			printf("%5d", array[i][j]);
		cout << endl << endl;
	}

	return 0;
}

测试结果如下:


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值