教你夺冠


私信TA

用户名:835685327

访问量:148616

签 名:

相互交流 相互学习

等  级
排  名 13
经  验 21607
参赛次数 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(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;
}
2020-03-05 08:07:03
为啥我这个提交之后答案错误呀,我自己测试没有错误呀
/* 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;
}
2020-02-22 14:42:27
#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");
}
为啥编译错哦?
2020-02-18 11:52:58
#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");
}
2020-01-21 17:42:15
#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][
2020-01-05 13:29:33
#include <stdio.h>

int main() {
	int i,j,n,x=2,y=1,num=1; 
	while(scanf("%d",&n)!=EOF) {
		num=1;
		x=2;
		y=1;
		while(n--) {
			int num1=num,x1=x;
			for(i=0; i<=n; i++) {
				printf("%d ",num);
				num+=x;
				x++;
			}
			printf("\n");
			num=num1+y;
			y++;
			x=x1+1;
		}
	}
}

感觉我这个更简洁
2019-10-24 20:46:18
可是没有限制N呀
2019-02-24 19:44:55