原题链接:蛇行矩阵
解题思路:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
首先定义二维数组num[5][5],根据数字递增的规律观察行列之和的关系;
a[0][0]=1(行+列=0)
a[1][0]=2 a[0][1]=3(行+列=1)
a[2][0]=4 a[1][1]=5 a[0][2]=6(行+列=2)
...
a[4][0]=11 ......a[0][4]=15(行+列=4)
由此可以看出,当我们输入n为5时,通过控制行列之和<5可以解决该问题
在行列之和为一定值的情况下,每执行一次循环,让行数减1,列数加1
注意事项:
1、输入n,控制行列之和sum<n(注意:sum不能等于n(二维数组性质))
2、初始化a=1,每执行一次循环先赋值,再执行a++
3、输出时,注意不是输出整个二维数组,只输出半个二维数组,剩下半个二维数组是没有值的。
参考代码:
#include<stdio.h>
int main(void)
{
int i,j,sum,n;
scanf("%d",&n);
int a=1;
int num[5][5];
for(sum=0;sum<n;sum++)//行加列=sum
{
for(i=sum,j=0;i>=0&&j<=sum;i--,j++)//在sum值固定的情况下,行列变换来赋值
{
num[i][j]=a;
a++;
}
}
for(i=0;i<=n;i++)
{
for(j=0;j<=n-1-i;j++) printf("%d ",num[i][j]);//输出每一项对应的值
printf("\n");//每一行输出完后进行换行
}
}0.0分
12 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
@KRzzzz int main(){ int i,j,n,t; int a[100][100]={0}; int m=1; scanf("%d",&n); for(t=0;t<n;t++){ j=0; i=t; while(i>=0&&j<=n-1){ a[i][j]=m++; i--; j++; } } for(i=0;i<n;i++){ for(j=0;j<n-i;j++){ printf("%d ",a[i][j]); } printf(" "); } }能帮我看看这个为什么不行吗? int main(){ int i,j,n,t; int a[100][100]={0}; int m=0; scanf("%d",&n); for(i=0;i<n;i++){ j=0; while(i>=0&&j<=n-1){ t=m++; a[i][j]=t; i--; j++; } } for(i=0;i<n;i++){ for(j=0;j<n-i;j++){ printf("%d",a[i][j]); } } }#include<stdio.h> int main() { int i,j,a,hang=1,lie,sum; printf("请输入:\n"); scanf("%d",&a); for(i=1;i<=a;i++) { hang=hang+i-1; lie=hang; sum=i+1; for(j=a+1-i;j>=1;j--) { printf("%-3d",lie); lie+=sum++; } printf("\n"); } return 0; }#include<stdio.h> int main() { int a[100][100] = { 0 }, n, j, i, k=1; scanf("%d", &n); a[0][0] = 1; for (i = 1; i < n; i++) { a[i][0] = a[i-1][0] + i; } for (i = 0; i < n; i++) { for (j = 1; j < n-i; j++) { a[i][j] = a[i][j - 1] + j + k; } k++; } for (i = 0; i < n; i++) { for (j = 0; j < n -i; j++) { printf("%d ", a[i][j]); } printf("\n"); } return 0; }