原题链接:蛇行矩阵
这种题目往往都是找出各个元素之间的规律。
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;
}0.0分
40 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
int main() { int n, arr[100][100] = { 0 },c=0; arr[0][0] = 1; scanf("%d", &n); for (int i = 0; i < n; i++) { if (i) arr[i][0] = arr[i - 1][0] + i; for (int j = 1; j <= n - i; j++) arr[i][j] += arr[i][j - 1] + j+1+c; c++; } for (int i = 0; i < n; i++) { for (int j = 0; j < n - i; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; } 很蠢的写法#include <stdio.h> int main() { int n; scanf("%d", &n); int a[10][10]; int i, j, c; a[0][0] = 1; for (i = 0; i < n; i++) { c = i + 2; for (j = 0; j < n; j++) { printf("%d ", a[i][j]); a[i][j + 1] = a[i][j] + c; c = c + 1; if (i + j == 4) { printf("\n"); a[i + 1][0] = a[i][0] + i + 1; break; } } } }看看我的 #include<stdio.h> int main(void) { int a; scanf("%d",&a); int change = 0; for(int i = 0; i < a; i++) { int number = 0; number = change; for(int j = 0; j < a - i; j++) { number = i + j + number; printf("%d ",++number); } change = i + change; printf("\n"); } return 0; }#include <bits/stdc++.h> using namespace std; int arr[101][101]; int main(){ int n; int num=1; cin>>n; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ arr[i-j][j]=num; num++; } } for(int i=0;i<n;i++){ for(int j=0;j<n-i;j++){ cout<<arr[i][j]<<" "; } cout<<endl; } return 0; }#include<stdio.h> void fun(int a,int b) { int c,d,e=1,g; g=b-1; for(d=1;d<=b-1;d++) { e=e+d; } for(c=0;c<=a-b;c++) { e=e+g; g++; 8 printf("%d ",e); } } int main() { int a,b,c,d; scanf("%d",&a); for(b=1;b<=a;b++) { fun(a,b); printf("\n"); } } 为什么我这个蛇是倒着跑的