解题思路:

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.0分

12 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 7 条评论

KRzzzz 2年前 回复TA
@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("
");         }     }
KRzzzz 2年前 回复TA
@KRzzzz 已解决0.0
KRzzzz 2年前 回复TA
能帮我看看这个为什么不行吗?
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]);
        }
    }


}
新手 2年前 回复TA
j真的有机会大于sum嘛
4 2年前 回复TA
#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;
}
小姜骑猪 2年前 回复TA
@小姜骑猪 我这个思路是先以第一个元素,确定第一行第一列元素,然后找到每行的关系进行赋值
小姜骑猪 2年前 回复TA
#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;
}