ACM方阵问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 06:03:14
Description
明明在上学的时候,参加数学兴趣班。在班上,老师介绍了一种非常有趣的阵列。该阵列由n个正整数构成,阵列中的数字从1开始递增,数字的排序规则是从1开始由中间逆时针向外转出,2出现在1的下面,然后直至输出n为止。 例如当n=5的时候,阵列如下:    5 1 4 2 3 当n=9时,阵列如下: 7 6 5 8 1 4 9 2 3 明明回家后想自己动手构造这样的阵列。他从n=1开始构造,但是他发现当n越来越大时,阵列的复杂性就越高,然后构造出来的阵列就越容易出错。为了降低构造阵列的出错率,提高构造速度,明明就求助于你,请你帮他写一个程序,来构造这样的阵列。 明明的问题可以归结为:给你一个正整数n,请你按题目描述中所述的方法,构造出阵列。
The Input
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅有一个正整数n(1≤n≤99),即所要构造的阵列的大小。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
The Output
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个大小为n的阵列,阵列中的数字用一个空格隔开,具体形式请参考输出样例。每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。
Sample Input
5
45

Sample Output
5
1 4
2 3
43 42 41 40 39 38 37
44 21 20 19 18 17 36
45 22 7 6 5 16 35
23 8 1 4 15 34
24 9 2 3 14 33
25 10 11 12 13 32
26 27 28 29 30 31

试下这个算法吧。通常程序的计算很复杂但结果有一定的规律,你可以考虑把所有结果都存储起来,然后,根据测试数据而相对应输出,会快很多。呵呵,不知道我有没有解释清楚。下面是算法:
1。 定义一个10*10的数组,里面存放了1-99,并且按照题目要求的格式存储。也就是,1在最里面,然后按逆时针增加。
2。 请求用户输入一个测试数据n,
3。 从定义的数组中找到n的位置(x,y)。
4。 找出子矩阵的长和高。
5。 根据子矩阵的长和高计算出每个元素的绝对位置,并输出。
6。 重复第二步直到程序结束。
ps:建议你假设输入的n=99,然后,你用笔在纸上画一个矩阵,你就可以更清晰自己的思路了。
希望有用。