| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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。 
 
 
 
知道上面的规律之后就可以写程序了,参考代码如下: 
- #include <stdio.h>
 
 -  
 
 - //N为总行数,rows为第几行,打印该行数据
 
 - void printN(int N, int rows)
 
 - {
 
 -     //确定第rows行的第一个元素的值:a(n) = a(n-1) + n - 1; a1 = 1;
 
 -     int first = 1;
 
 -     int i;
 
 -     for (i = 1; i <= rows; i++)
 
 -     {
 
 -         first += i - 1;
 
 -     }
 
 -  
 
 -     //第rows行的第一个元素为first
 
 -     int tmp = first;
 
 -     //第rows行的元素之间的增量inc从rows+1开始
 
 -     int inc = rows + 1;
 
 -     for (i = 1; i <= N - rows + 1; i++) //输出第rows行的元素,共有N-rows+1个
 
 -     {
 
 -         //输出元素时,该行最后一个元素后面没有空格符
 
 -         if (i < (N - rows + 1))
 
 -             printf("%d ", tmp);
 
 -         else
 
 -             printf("%d", tmp);
 
 -  
 
 -         tmp += inc; //每一个元素都是前一个元素加上inc
 
 -         inc++;      //inc++
 
 -     }
 
 - }
 
 -  
 
 - int main()
 
 - {
 
 -     int N;
 
 -     scanf("%d", &N);
 
 -  
 
 -     //输出N行数据
 
 -     int i;
 
 -     for (i = 1; i <= N; i++)
 
 -     {
 
 -         printN(N, i);
 
 -         printf("\n");
 
 -     }
 
 -  
 
 -     return 0;
 
 - }
 
  复制代码 
原文:https://blog.dotcpp.com/a/6864 |   
 
 
 
 |