教你夺冠


私信TA

用户名:835685327

访问量:148612

签 名:

相互交流 相互学习

等  级
排  名 13
经  验 21606
参赛次数 0
文章发表 84
年  龄 0
在职情况 学生
学  校 辣鸡施工大学
专  业

  自我简介:

努力刷题 熟能生巧!

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

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分

64 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#include<stdio.h>
int main()
{
    int n,a=0;
    scanf("%d",&n);
    for(int i=1;i<n+1;i++)
    {
        for(int j=i;j<n+1;j++)
        {
            a+=j;
            printf("%d ",a);
        }
        printf("\n");
        a=((i+1)*i)/2-i;
    }
}
2021-03-27 22:01:28
递归法,不过时间复杂度还是O(n²),比较麻烦
#include<stdio.h>
 
int head(int n){
	if(n == 1){
		return 1;
	}else{
		return head(n - 1) + n - 1;
	}
}

int main()
{
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n; i++){
		int d = i;
		printf("%d ", head(i));
		int sum = 0;
		for(int j = n - i; j >= 1; j--){
			d += 1;
			sum += d;
			if(j != 1){
				printf("%d ", head(i) + sum);
			}else{
				printf("%d\n", head(i) + sum);
			}
		}
	}
}
2021-03-25 23:13:31
#include<iostream>
using namespace std;
int main()
{
    int n;
	cin>>n;
	int a[n][n];
	int i,j;
	int v=1;
	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-1;j++)
		{
			a[i][j]=a[i][j-1]+j+1+i;

		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<=n-i-1;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}
2021-03-06 00:05:55
#include<iostream>
using namespace std;
int main()
{
    int n;
	cin>>n;
	int a[n][n];
	int i,j;
	int v=1;
	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-1;j++)
		{
			a[i][j]=a[i][j-1]+j+1+i;

		}
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<=n-i-1;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}
2021-03-06 00:05:33
#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;
}
2021-01-23 12:09:17
求大佬解惑,运行不出来,,,,,



#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");
	} 
}
2020-10-14 19:27:02
不用这么麻烦~
#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;
}
2020-03-23 18:20:02
#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;
}
2020-03-09 22:02:41