文章

3

粉丝

321

获赞

7

访问

29.5k

头像
1_非递归(c、c++递归会了再回来)
P1392 西北工业大学
发布于2020年3月31日 11:42
阅读数 8.8k

#include<bits/stdc++.h>

using namespace std;

int a[21][21];
int main(){
	
	int n;
	while(scanf("%d",&n) != EOF){
		for(int i = 0; i < n; i++){
			for(int j = 0; j <= i; j++){
				if(i == 0){  //首部是1
					a[i][j] = 1;
					continue;
				}
				if(i == j){//尾部刚好是对称轴也是1
					a[i][j] = 1;
					continue;
				}
				a[i][j] = a[i-1][j-1]+a[i-1][j];
			}
		}
		for(int i = 1; i < n; i++){
			for(int j = 0; j <= i; j++){
				printf("%d ",a[i][j]);
			}
			printf("\n");
		}
	}	
	
	
	
	return 0;
} 

 

登录查看完整内容


登录后发布评论

2 条评论
928上岸梦校!
2023年8月8日 16:16

#include <iostream>

// 递归函数计算杨辉三角形中位置(row, col)的值
int calculateValue(int row, int col)
{
    if (col == 0 || col == row)
    {
        return 1; // 边界情况,首尾元素为1
    }
    else
    {
        // 递归计算当前位置的值为上一行相邻两个位置的值之和
        return calculateValue(row - 1, col - 1) + calculateValue(row - 1, col);
    }
}

int main()
{
    int n;
    while (std::cin >> n)
    {
        for (int i = 1; i < n; i++) // 要求比n少一行
        {
            for (int j = 0; j <= i; j++)
            {
                std::cout << calculateValue(i, j) << " ";
            }
            std::cout << std::endl;
        }
    }

    return 0;
}

上面那条是题解中其他人的写法,这个是我的,思路都差不多,但是都是会超时,只能通过75%的样例

赞(0)
928上岸梦校!
2023年8月8日 16:14

#include<bits/stdc++.h>
using namespace std;

int func (int i, int j) {
	if (j == 1 || j == i + 1)//每行的边界为 1 
		return 1;
	else  return (func(i - 1, j - 1) + func(i - 1, j));
	
	/* 
	杨辉三角形在数组中排列为 1 1
							 1 2 1
							 1 3 3 1
							 1 4 6 4 1
							 。。。。 
	所以当前位置的值,为左上的值和正上的值的和。
	*/ 
}

int main () {
	int n;
	while (cin >> n) {
		for(int i = 1; i < n; ++i){         //行 
			for(int j = 1; j <= i+1; ++j)  //列,第 i 行有 i+1 列 
				cout << func(i, j) << " ";
			cout << endl;
		}
	}	
}

递归写法,但是会超时

赞(0)