这种题目往往都是找出各个元素之间的规律。

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;
}


点赞(6)
 

0.0分

40 人评分

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

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

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

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

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

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

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

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

评论列表 共有 33 条评论

crj 10月前 回复TA
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;
}
很蠢的写法
故乡的星雨 1年前 回复TA
这个tmp是什么
ikun 2年前 回复TA
@好好学习 楼主您好,我觉得那个if语句中条件改为i+j==n-1通用性会更高一点,感谢大佬的思路!!
好好学习 2年前 回复TA
#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;
			}
		}
	}
}
好好学习 2年前 回复TA
@Ikaros @uq_20493386716 和8没关系啊
RRRaow 2年前 回复TA
看看我的
#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;
}
Allen 3年前 回复TA
#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;
}
Ikaros 3年前 回复TA
@Ikaros g++ 旁边那个8是多余的
Ikaros 3年前 回复TA
@Ikaros g++ 旁边那个8是多余的
Ikaros 3年前 回复TA
#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");
	  } 
  }  为什么我这个蛇是倒着跑的