输出一个 n 阶方阵,其元素排列方式为:从左上角开始按列顺序呈现出蛇形。如:
1 20 21 40 41 60 61 80 81 100
2 19 22 39 42 59 62 79 82 99
3 18 23 38 43 58 63 78 83 98
4 17 24 37 44 57 64 77 84 97
5 16 25 36 45 56 65 76 85 96
6 15 26 35 46 55 66 75 86 95
7 14 27 34 47 54 67 74 87 94
8 13 28 33 48 53 68 73 88 93
9 12 29 32 49 52 69 72 89 92
10 11 30 31 50 51 70 71 90 91
输入描述
每行一个正整数 n (n <= 120),表示 n 阶方阵。
输出描述
按列序排列的蛇形矩阵,每个方阵之间空一行。每个矩阵元素间一个空格,包含最后一个元素之后。
样例输入
3
4
样例输出
1 6 7
2 5 8
3 4 9
1 8 9 16
2 7 10 15
3 6 11 14
4 5 12 13
抱歉,我用的暴力破解,希望采纳
#include<stdio.h>
void main()
{
int i,j,n,k;
long a[100][100];
printf(" 样例输入:\n");
scanf("%d",&n);
k=1;
for(i=1;i<=n;i++)
{
if(i%2==0)
{
for(j=n;j>=1;j--)
{
a[j][i]=k++;
}
}
else
{
for(j=1;j<=n;j++)
{
a[j][i]=k++;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}_
#include<stdio.h>
int t[120][120];
int main()
{
int n,i,j;
do {
scanf("%d",&n);
int d,r=0,p=1,flag=1;
while(r<n)//逐列扫描
{
d=0;
while(d<n&&flag==1)
{
t[d++][r]=p++;
}
while(d<n&&flag==-1)
{
t[n-(d++)-1][r]=p++;
}
r++;
flag*=-1;
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%d ",t[i][j]);
}
printf("\n");
}
} while(n>0);
return 0;
}
#include<stdio.h>
//交换元素的值(地址传递,函数内值的改变会影响传递元素的值)
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void main(){
int n, i, j, k;
int matrix[120][120]; //矩阵
scanf("%d", &n); //输入阶数n
for(i = 0, k = 1; i < n; i++) //对n阶矩阵初始化
for(j = 0; j < n; j++)
matrix[i][j] = k++;
for(i = 1; i < n; i++) //遍历1 ~ n-1行
if(i % 2 != 0) //如果为奇数行
for(j = 0; j < n / 2; j++) //矩阵第i行的元素进行逆序排序
swap(&(matrix[i][j]), &(matrix[i][n - j - 1]));
for(i = 0; i < n; i++) { //打印矩阵
for(j = 0; j < n; j++)
printf("%5d", matrix[j][i]); //打印j行i列
putchar('\n');
}
}
//以3阶方阵为例
//初始化:
//1 2 3 (0行)
//4 5 6 (1行)
//7 8 9 (2行)
//转换:
//0行:不变
//1行:奇数行,逆序排序;新的1行(6 5 4)
//2行:偶数行,不变
//新矩阵
//1 2 3
//6 5 4
//7 8 9
//输出(i为外循环,j为内循环)(matrix[j][i](j行i列))
//第一次循环:1 6 7 (分别为0行0列、1行0列、2行0列)
//第二次循环:2 5 8 (分别为0行1列、1行1列、2行1列)
//第三次循环:3 4 9 (分别为0行2列、1行2列、2行2列)
这个逻辑搞清楚就好了,一个循环就搞定,奇数列和偶数列分开就行,i,j从0开始到n-1,if i%2=0,(即余数=0表示奇数列,数组第一列是a[0][j]),then a[i][j]=in+j;else a[i][j]=in+n-j;endif