鱼C论坛

 找回密码
 立即注册
查看: 1699|回复: 5

大佬快来救命啊~

[复制链接]
发表于 2020-11-3 18:27:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void createMatrix(int n);//声明一个void 类型的函数他包含一个int型参数

void createMatrix(int n)//假设n为3
{
        int i, j, oi, oj, num, max;//定义6个int型变量

        // 创建一个存放矩阵的二维数组
        int matrix[n][n];//int matrix[3][3]   n 1 n n n n n n 0
        // 填充为0
        max = n * n;//max=3*3==9
        memset(matrix, 0, max * sizeof(int));//memset(matrix,0,9*sizeof(int)==36)

        // 将1存放到第0行的中间位置
        matrix[0][n/2] = 1;//matrix[0][1]==1

        // 记录当前的行号和列号
        i = 0;
        j = n / 2;//j=1

        for (num = 2; num <= max; num++)//1 num=2 2 num=3 3 num=4 4 num=5 5 num=6 6 num=7 7 num=8
        {
                // 记住当前位置
                oi = i;//1 oi=0 2 oi=1 3 oi=2 4 oi=3 5 oj=4 6 oj=5 7 oj =6
                oj = j;//1 oj=1 2 oj=1 3 oj=1 4 oj=1

                // 向右上角走一步
                i = i - 1;//1 i=-1 2 i=0 3 i=1 4 i=2 5 i=3 6 i=4 7 i=5
                j = j + 1;//1 j=2  2 j=2 4 j=2 4 j=2 5 j=2 6 i=2 7 j=2

                if (i < 0)
                {
                        i = n - 1;//1 i=2
                }

                if (j > n - 1)
                {
                        j = 0;
                }

                if (matrix[i][j] != 0)
                {
                        i = oi + 1;// 1 i=0+1=1  2 i=2 3 i=3 4 i=4 5 i=5 6 i=6 7 i=7
                        j = oj;//1 j=1           2 j=1 3 j=1 4 j=1 5 j=1 6 j=1 7 j=1
                }

                matrix[i][j] = num;
        }

        // 打印结果
        for (i = 0; i < n; i++)//1 i=7
        {
                for (j = 0; j < n; j++)//1 j=1 2 j=2
                {
                        printf("%2d   ", matrix[i][j]);//1 matrix[7][1]  2 matrix[7][2]
                }
                putchar('\n');
        }
}

int main(void)
{
        int n;

        printf("请输入一个奇数:");
        scanf("%d", &n);
        while (!(n % 2) || n < 3)
        {
                printf("输入错误,必须是一个大于2的奇数!\n");
                printf("请重新输入:");
                scanf("%d", &n);
        }

        createMatrix(n);

        return 0;
}
大佬 这个void createMatrix(int n)函数内的定义我看不懂啊。。有没有谁帮忙逐条分析下的 尤其是for循环内的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-3 18:56:53 | 显示全部楼层
。。。。。。。嗯~ o(* ̄▽ ̄*)o? 人呐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-3 19:07:32 | 显示全部楼层
注释不重要 那只是我自己琢磨时候写的 直接看代码就是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-3 19:10:57 | 显示全部楼层
啥题目啊,发出来看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-3 20:24:03 | 显示全部楼层
欸嘿嘿搞定了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-3 20:24:33 | 显示全部楼层
假设n=3
0 0 0  0 1 0
0 0 0  0 0 0
0 0 0  0 0 0
i=0
j=1
1次循环 Num=2
oi=i=0
0j=j=1
i=i-1=-1
j=j+1=2
if(i<0) 执行                备注if 1
{i=n-1==3-1=2}
if(j>n-1) 不执行         备注if 2
{j=0}
if(matrix[2][2]!=0)不执行  备注if 3
{i=oi+1; j=oj;}
matrix[2][2]=2
0 1 0
0 0 0
0 0 2
二次 num=3
oi=i=2
oj=j=2
i=i-1=1
j=j+1=3
if1不执行 i=1
if2执行 j=0
if3不执行
matrix[1][0]=3
0 1 0
3 0 0
0 0 2
三次 num=4
oi=i=1
oj=j=0
i=i-1=0
j=j+1=1
if1不执行 i=0
if2不执行 j=1
if3执行 i=oi+1==1+1=2;j=oj=0;
matrix[2][0]=4
0 1 0
3 0 0
4 0 2
四次 num=5
2
0
1
1
不 i=1
不 j=1

matrix[1][1]=5
0 1 0
3 5 0
4 0 2
5次 num=6
1
1
0
2
不 i=0
不 j=2

matrix[0][2]=6
0 1 6
3 5 0
4 0 2
6次 num=7
0
2
-1
3
是 i=2
是 j=0
是 i=1;j=2
matrix[1][2]=7
0 1 6
3 5 7
4 0 2
7次循环 num=8
1
2
0
3
不 i=0
是 j=0

matrix[0][0]=8
8 1 6
3 5 7
4 0 2
9次循环 num=9
0
0
-1
1
是 i=2
不 j=1

matirx[2][1]=9
8 1 6
3 5 7
4 9 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 18:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表