实验十一(2018)E. 实验8_10_蛇形矩阵
↑请移步后来更新过的自动机写法,这个太难懂了
首先说一下我这个写的并不好……但好歹能跑能过
有丶像电子的能级交错图
先比划划看要做什么事情,先左上角写个1,再下一行,往右上方写2,3。。。。到顶上后右移一格,再往左下写,再右上,就像个蛇(皮)了。
写3阶的时候,我们实际上是把自然数写到了
(00) (10 01) (02 11 20)(30 21 12 03) //i行j列
据每次划线进行分组
每一组内行数+列数保持不变,一个递减,一个递增
在只考虑左上边时,我们发现,每组总是从行(列)为零开始,以列(行)为0结束
事实上,按第一组第二组这样分,偶数组以行数i为0时结束,奇数组以j为0时结束,每次结束后,非零的那一位加一个,这样代码中不含state的部分就写成了
而写到四阶就发现了问题
(00)(10 01)(02 11 20)(30 21 12 03)(13 22 31)(32 23 33)
我们发现后面几组不是在i或者j为0时结束了,这是因为主对角线画完了,右下角的部分对角线一个比一个短,每组交替时的下界从0变成了1,2。。。
所以我们用state来检测是不是到了上半画满了,又得分奇偶……
然后state被激活时,每次换组都会把下界提高一个
#include
int main(int argc, char const *argv[])
{int a[100][100],i=0,j=0,n,group=1,k,inf=0,state=0;scanf("%d",&n);for(k=1;k<=n*n;k++)//number generator{ a[i][j]=k;if(group%2==1){if(j==inf) {i++;group++;if(state==1){inf++;i--;j++;}}else{i++;j--;}}else{if(i==inf) {j++;group++;if(state==1){inf++;j--;i++;}}else{i--;j++;};}if(n%2==0&&j==n-1&&inf==0)state++;else if(n%2==1&&i==n-1&&inf==0)state++;}k=1;for(i=0;i<n;i++)for(j=0;j<n;j++){printf("%d",a[i][j]);if(k==n){putchar('\n');k=1;}else {putchar(' ');k++;}}return 0;
}
题目描述
问题描述:
蛇形矩阵是一个nn的矩阵,将整数1到nn按照蛇形的顺序装入一个 n*n 的蛇形矩阵中,如样例所示分别为5阶和10阶蛇形矩阵:
输入与输出要求:
输入一个整数n,代表蛇形矩阵的阶数,n的范围是1—100。输出蛇形矩阵。每行的每个元素用空格分隔,注意最后一个数的后面为换行符。
程序运行效果:
Sample 1:
5
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
Sample 2:
10
1 3 4 10 11 21 22 36 37 55
2 5 9 12 20 23 35 38 54 56
6 8 13 19 24 34 39 53 57 72
7 14 18 25 33 40 52 58 71 73
15 17 26 32 41 51 59 70 74 85
16 27 31 42 50 60 69 75 84 86
28 30 43 49 61 68 76 83 87 94
29 44 48 62 67 77 82 88 93 95
45 47 63 66 78 81 89 92 96 99
46 64 65 79 80 90 91 97 98 100
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
