C/C++蓝桥杯之杨辉三角

问题描述:下面是著名的杨辉三角

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

... ... ...

如果按从上到下,从左到右的顺序把所有数排成一列,则可以得到如下数列:

1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,...

给定一个正整数N,请你输出数列中N第一次出现是在第几个位置?

分析:本题主要考察杨辉三角的相关知识,通过观察可以得出杨辉三角的基本性质,每个数均等于它上方两数之和。

可以采用递推的方式从上到下计算出杨辉三角中每个元素的数值,边计算边比较。

首先看一个杨辉三角的打印C程序(我以前写的)

cpp 复制代码
#include<stdio.h>
#include<stdlib.h>
#define N 11//表示要打印的行数
int main()
{
	int i = 0;
	int j = 0;
	int tge[N][N];
	for (i = 0; i < N; i++)//先打印每一行的第一个和最后一个;
	{
		tge[i][0] = 1;
		tge[i][i] = 1;
	}
	for (i = 2; i < N; i++)//打印中间部分
	{
		for (int j = 1; j < i; j++)
		{
			tge[i][j] = tge[i - 1][j - 1] + tge[i - 1][j];
		}
	}
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < 2 * (N - i); j++)
		{
			printf(" ");
		}
		for (j = 0; j <= i; j++)
		{
			printf("%4d", tge[i][j]);
		}
		printf("\n");
	}
	return 0;
}

C程序:

cpp 复制代码
#include<stdio.h>
#define M 20000//这里可以改变范围大小,有时题目中会给出要求
int a[M][M];//用数列来存放
int main()
{
	a[1][1] = 1;
	int num = 1;//数的总量一开始为1
	int N;
	printf("请输入要查询的数:");
	scanf("%ld", &N);//N代表要查找的数
	for (int i = 2; i < M; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//每个数等于上方两数之和
			num++;//每算出一个数,数的总数量就加1

			if (a[i][j] == N)
			{
				printf("这个数的位置在第%d个", num);
				return 0;
			}
		}
	}
}

C++程序:

cpp 复制代码
//二分查找的方法
#include<iostream>
using namespace std;
int n;
int combi(int a,int b)
{
	int res=1;
	for(int i=a,j=1;j<=b;i--,j++)
	{
		res=res*i/j;
		if(res>n)
		{
			return res;
		}
	}
	return res;
}

bool check(int k)
{
	int l=k*2;
	int r=n;
	while(l<r)
	{
		int mid=(l+r)/2;
		if(combi(mid,k)>=n)
		{
			r=mid;
		}
		else
		{
			l=mid+1;
		}
	}
	if(combi(r,k)!=n)
	{
		return false;
	}
	cout<<r*(r+1)/2+k+1;
	return true;
}
int main()
{
	cout<<"请输入你要查找的数:";
	cin>>n;
	for(int k=16;k>=1;k--)
	{
		if(check(k))
			break;
	}
	return 0;
}

以上提供了两种方法,可供大家自由选择!

相关推荐
神仙别闹4 分钟前
基于QT(C++)实现线性表的建立、插入、删除、查找等基本操作
java·c++·qt
salipopl22 分钟前
C/C++ 中 volatile 关键字详解:原理、作用与实际应用
开发语言·c++
张赫轩(不重名)22 分钟前
图论3:连通性问题(复杂度均为 O(N + M) )
c++·算法·图论·拓扑学
AIminminHu30 分钟前
(让 C++ 程序长出大脑:从“语音遥控器”到具身智能 Agent 的进化之路)------OpenGL渲染与几何内核那点事------(二-1-(15))
开发语言·c++·agent·具身智能
君义_noip1 小时前
CSP-J 2025 入门级 第一轮(初赛) 完善程序(1)
c++·算法·信息学奥赛·csp 第一轮
WL_Aurora1 小时前
备战蓝桥杯国赛【Day 6】
python·算法·蓝桥杯
admiraldeworm2 小时前
c -> true 导致异常返回 404 问题排查
c语言·开发语言
哭泣方源炼蛊2 小时前
AtCoder Beginner Contest 456 E补题(分层图 + 有向环检测 )
c++·算法·深度优先·图论·拓扑学
Yuk丶2 小时前
UE4 与 UE5:技术差异深度解析
c++·ue5·游戏引擎·ue4·游戏程序·虚幻
故事和你913 小时前
洛谷-数据结构2-1-二叉堆与树状数组1
开发语言·数据结构·c++·算法·动态规划·图论