输一个整数n,输出一个n*n的蛇形矩阵
列如输入5
输出
001 002 003 004 005
010 009 008 007 006
011 012 013 014 015
020 019 018 017 016
021 022 023 024 025
c语言期末考试题(已经考完试了,但我没写出来,想请问一下该怎么写)
int main() {
int n, m = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
if (i % 2 == 0)
for (int j = 0; j < n; j++) {
m++;
printf("%03d ", m);
}
else {
m += n;
for (int j = 0; j < n; j++) {
printf("%03d ", m - j);
}
}
printf("\n");
}
return 0;
}
想生成这个方法很多。首先得确保如果每行都是顺序的你已经会了,那么现在说说偶数行逆序怎么做。
方法1.内层循环写2个,用if(i%2==0)判断一下,如果是奇数行就j从0到4遍历,如果是偶数行就j从4到0遍历
方法2.循环还是同一个,但是判断如果是奇数,给下标是[i][j]的元素赋值,如果是偶数,给下标是[i][4-j]的元素赋值
方法3.定义一个方向变量a,先让它是1,走到结尾让它变成-1,然后列的指针每次+a
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int x = 0, y = 0, n = 0, i, j, r;
int a[100][100];
int flag = 1; //判断一行中为正着填数还是倒着填数 正为1 倒为0
scanf("%d", &r); //r为输出的行数
n = r * r;
j = 1; //记数
for (i = 1; i <= n; i++)
{
a[x][y] = i; //填数
if (flag == 1)
{
if (j % r != 0) //判断一行是否已经填完
{
y++; //向右移动
j++;
}
else
{
x++; //向下移动
flag = 0;
j = 1;
}
}
else
{
if (j % r != 0)
{
y--; //向左移动
j++;
}
else
{
x++; //向下移动
flag = 1;
j = 1;
}
}
}
for (i = 0; i < r; i++)
{
for (j = 0; j < r; j++)
{
printf("%03d ", a[i][j]);
}
printf("\n");
}
return 0;
}