原题链接:蛇行矩阵
这种题目往往都是找出各个元素之间的规律。
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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int main() { int a[100],s,p = 0,q = 0; scanf("%d",&s); for (int i = 1; i < 101; ++i) { a[i- 1] = i; } for (int k = 1; k <= s; k++) { q += k - 1; //a(n) = a(n - 1) + n - 1; p = q; for (int j = 1; j < s - k + 2; ++j) { printf("%d",a[p]); if(j != s) printf(" ");//当该数字不为行末时,加空格 p += j + k; //第k行的元素之间的增量从k+1开始 }printf("\n"); } return 0; }求大佬解惑,运行不出来,,,,, #include<stdio.h> main() { int i,j,m=0,k,i2; scanf("%d",k); int a[k][k]; for(i=0;i<=k-1;i++) {for(i2=i;i2>=0;i2--) for(j=0;j<=i;j++) a[i2][j]=++m;} for(i=0;i<=k-1;i++) {for(j=0;j<=4-i;j++) printf("%d ",a[i][j]); printf("\n"); } }不用这么麻烦~ #include <stdio.h> int main() // 洛谷:问题 1097: 蛇行矩阵 { int N; scanf("%d", &N); int i, j, down = 1, right; for(i = 0; i < N; i++){ down += i; right = down; printf("%d ", down); for(j = i+1; j < N; j++){ right = right + j+1; printf("%d",right); if(j!=N-1) printf(" "); } printf("\n"); } return 0; }#include<stdio.h> int main() { int N,m,n,k,a[100][100]; scanf("%d",&N); a[0][0] = 1; k=N; for (n=0;n<N;n++) { for (m=0;m<k;m++) { a[n][m+1]=a[n][m]+n+m+2; printf("%d ", a[n][m]); } printf("\n"); k--; a[n+1][0] = a [n][0]+ n+1 ; } return 0; }#include<stdio.h> int main(void) { int n; while (scanf("%d", &n)!=EOF) { int i, j, s; int z[100][100] = { {0} }; z[0][0] = 1; for (i = 1; i < n; i++) z[0][i] = z[0][i - 1] + i + 1; s = 2 * n - 3; for (j = n - 2; j >= 0; j--)//列不变,行变化 { for (i = 1; i <= s; i++) z[i][j] = z[i - 1][j + 1] - 1; s--; } s = n; for (i = 0; i < n; i++) { for (j = 0; j < s; j++) printf("%d ", z[i][j]); s--; puts(""); } } return 0; }为啥我这个提交之后答案错误呀,我自己测试没有错误呀 /* C算法97-蛇形矩阵 */ #include<stdio.h> int main(){ int n,i,j; int k=1,t=1,p=0; printf("请输入行数: "); scanf("%d",&n); if(n<=100){ for(i=1;i<=n;i++){//i 行 j列 t=t+i-1; //确定各行的第一个元素 k=t; for(j=1;j<=n+1-i;j++){ printf("%d\t",k); k=k+j+1+p; //确定一行中各个元素的值 } p++; printf("\n"); } } return 0; }#include<stdio.h> void main() { int a,i,j,k=1; int b[100][100]={0}; while((scanf("%d",&a))!=EOF&&(a>0&&a<=100)) { b[0][0]=1; printf("%d",b[0][0]); for(i=1;i<a;i++) { b[i][0]=b[i-1][0]+i; for(j=1;j<=a-i;j++) { b[i-1][j]=b[i-1][j-1]+j+i; printf(" %d",b[i-1][j]); } printf("\n%d",b[i][0]); } } printf("\n"); } 为啥编译错哦?#include <stdio.h> #include <stdlib.h> int main() { int num; int sum1 = 1; int sum2 = 0; scanf("%d", &num); for (int i = 0; i < num;i++) { sum1 = sum1+i; printf("%d ", sum1); sum2 = sum1; for (int j = i+2; j <= num; j++) { sum2 = sum2 + j; printf("%d ", sum2); } printf("\n"); } system("pause"); }#include<iostream> #include<iomanip> #include<cstdio> #include<cstdlib> using namespace std; int main() { int m; scanf("%d",&m); int a[m][m]; int i = 0,j = m-1; int n = (m+1)*m/2; while(n!=0) { a[i][j] = n; n--; if(j==0) { j = i-1; i = 0; } else { i = i+1; j = j-1; } } for(int i = 0;i<m;i++) { for(int j = 0;j<m-i;j++) { if(j==0) printf("%d",a[i][j]); else printf(" %d",a[i][