鱼C论坛

 找回密码
 立即注册
查看: 2165|回复: 0

[技术交流] 蛇行矩阵

[复制链接]
发表于 2021-3-24 15:28:02 | 显示全部楼层 |阅读模式

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

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

x
题目描述
蛇形矩阵是由 1 开始的自然数依次排列成的一个矩阵上三角形。
输入
本题有多组数据,每组数据由一个正整数 N 组成。(N 不大于 100)
输出
对于每一组数据,输出一个 N 行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5

样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
这种题目往往都是找出各个元素之间的规律。

1 我们可以发现,每一行的首元素之间的规律为:

  a(n) = a(n - 1) + n - 1;

  a(1) = 1;

  这个结论很容易就用一个 for 循环实现。

2 再找出每一行元素之间的规律:

  当输入的正整数为 N 时,第 rows 行将要输出 N-rows+1 个元素,而每行首元素和首元素下一个元素之间的增量 inc 为 rows+1,往后元素之间增量加 1。



知道上面的规律之后就可以写程序了,参考代码如下:
  1. #include <stdio.h>

  2. //N为总行数,rows为第几行,打印该行数据
  3. void printN(int N, int rows)
  4. {
  5.     //确定第rows行的第一个元素的值:a(n) = a(n-1) + n - 1; a1 = 1;
  6.     int first = 1;
  7.     int i;
  8.     for (i = 1; i <= rows; i++)
  9.     {
  10.         first += i - 1;
  11.     }

  12.     //第rows行的第一个元素为first
  13.     int tmp = first;
  14.     //第rows行的元素之间的增量inc从rows+1开始
  15.     int inc = rows + 1;
  16.     for (i = 1; i <= N - rows + 1; i++) //输出第rows行的元素,共有N-rows+1个
  17.     {
  18.         //输出元素时,该行最后一个元素后面没有空格符
  19.         if (i < (N - rows + 1))
  20.             printf("%d ", tmp);
  21.         else
  22.             printf("%d", tmp);

  23.         tmp += inc; //每一个元素都是前一个元素加上inc
  24.         inc++;      //inc++
  25.     }
  26. }

  27. int main()
  28. {
  29.     int N;
  30.     scanf("%d", &N);

  31.     //输出N行数据
  32.     int i;
  33.     for (i = 1; i <= N; i++)
  34.     {
  35.         printN(N, i);
  36.         printf("\n");
  37.     }

  38.     return 0;
  39. }
复制代码

原文:https://blog.dotcpp.com/a/6864

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 18:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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