博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0082-莱布尼兹三角形
阅读量:5258 次
发布时间:2019-06-14

本文共 951 字,大约阅读时间需要 3 分钟。

题目

 

莱布尼兹三角形
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

如下图所示的三角形,请编程输出图中排在第 n 行从左边数第 m 个位置上的数。 

输入
一行包括两个正整数,分别为 n 和 m,两数间用一个空格分隔。
输出
一个如样例所示格式的分数。
输入示例
6 2
输出示例
1/30
其他说明
数据范围:1<= m <= n <= 100.

 

分析

  这道题也是前100道题中为数不多的需要用到算法解决的题了。所用算法为:递推。

  递推大概就类似于找规律,通过对数组下标的利用最终在对应位置找到结果。

  所以,咱们要先找到规律。

  经过观察,我们发现:下一行的第1、2个数相加就等于上一行的第1个数,下一行的第2、3个数相加就等于上一行的第2个数……以此类推,第x行的第a、b个数相加就等于第x-1行的第a个数。同时左右两边则为1/1,1/2,1/3……即分母依次增加1。

  发现规律后,我们就可以根据它写代码了。

  同时有一点特别要注意:位置越靠下的数的分母越大,int会存不下。

代码

#include
using namespace std;long long a[105][105],n,m;//越往下分子越大,避免炸掉。int main(){ a[1][1]=1; scanf("%lld%lld",&n,&m); for(long long i=1;i<=n;i++)//本题可以只计算分母,避免精度不够。 { for(long long j=1;j<=i;j++) { if(j==1) a[i][j]=i;//左右两边为1/1,1/2,1/3…… else a[i][j]=a[i-1][j-1]*a[i][j-1]/(a[i][j-1]-a[i-1][j-1]);//第x行的第a、b个数相加就等于第x-1行的第a个数。 } } printf("1/%lld",a[n][m]);//输出第n行m列。 return 0;}

转载于:https://www.cnblogs.com/DARTH-VADER-EMPIRE/p/10000238.html

你可能感兴趣的文章
mysql数据库 中文乱码
查看>>
Linux下Mysql数据库互为主从的配置过程
查看>>
ECSHOP系统,数据库表名称、结构
查看>>
Python Web开发框架Django
查看>>
【Install】我是如何安装Linux类系统的
查看>>
作业三4
查看>>
多态存在的3个必要条件
查看>>
code First 四
查看>>
Django与Ajax
查看>>
再做一题,2013-6-16更新
查看>>
Oracle_Statspack性能诊断工具
查看>>
面向对象(封装、继承、多态、抽象)
查看>>
Memcached数据库缓存
查看>>
转获取sql维护的表关系
查看>>
网络基础——TCP/IP五层模型
查看>>
HDU-3018 Ant Trip(欧拉回路)
查看>>
CSS2.0实现面包屑
查看>>
css font的简写规则
查看>>
linux查看和修改PATH环境变量的方法
查看>>
浅谈自定义UITextField的方法
查看>>