问题的描述是:给出一个30*30的二维数组,用1~900这900个数字去填满这个二维数组,并且打印结果。要求是实现填充顺序是顺时针,例如现在有一个3*3规模的二维数组,用9个数字去填满它,则结果如下。
1 2 3
8 9 4
7 6 5
可以看出这是一个顺时针打印的1~9的排列。
假定num = 1;
对于本题目给出的要求,我们想到用4个for循环分别打印行和列,并且每次打印num的值会依次递增,直到循环到最后一次后,num = 900为止,但是显然4个for循环不够打印出30*30的列表,所以这时候我们需要在4个for循环外面套上一个大的while循环,其存在是为了判断num目前的值是否小于等于900,如果条件为真,则执行循环,打印列表的行列,如果为假,则说明打印完成,那么就退出循环。
对于四个for循环,最难的就是如何控制行列的增加,比如说我第一个for循环,正常打印第一行1~30的数字,但是在这一轮所有的for循环打印完后,我该如何通过第一个for循环打印第二行呢?
所以就想到使用四个参数来表示行列的变化,我选择a,b,c,d来表示,下面是我的思路。
最开始我也是设了4个参数,但是由于混乱的逻辑,导致最后输出十分混乱,在经过画图和思考之后也理解了这四个参数之间的关系了,然后列出四个for()循环来解决问题。
接下来是代码部分,代码中我没有单独写打印函数,就直接在主函数中将最后的二维数组打印出来。
代码:
#include
int main() {
int count = 0;//计数器
int rui[30][30] = { {0} };//二维数组
int num = 1;
int yang = 30 * 30;
int a = 0;//控制行的a b
int b = 29;
int c = 0;//控制列的c d
int d = 29;
while (num