题目描述:
小蔡有一张三角形的格子纸,上面有一个大三角形。这个边长为 的大三角形, 被分成 个边长为 1 的小三角形(如图一所示)。现在,小蔡选择了一条水平边 删除(如图二所示),请你找出图上剩余三角形的数量为多少。
这道题的算法知识点对应的是c++的高精度,但是我是比较懒的,直接用python写了,python是不会有高精度的问题的,唯一的缺点就是运行速度慢
思路:
之后就是算删边以后剩余三角形的数量,分为两种情况,一种是在某行的第一个或这最后一个,另外就是在中间的,然后计算一下即可
代码如下:
# -*- coding: utf-8 -*-
n = int(input())
x,y = map(int,input().split())
ans = 0
d = {}
l = {}
l[1] = 1
d[1] = 0
d[2] = 1
for i in range(2,n+1):l[i] = l[i-1] + i * (i + 1) / 2
for i in range(3,n+1):d[i] = i * (i - 1) / 2 + d[i-2]
ans += d[n] + l[n]
print("全部三角形个数:{}".format(ans))
if y == 1 or y == x:ans -= xif n - x >= x:ans -= xelse :ans -= n - x
else :ans -= 2 * (x - 1)if n - x >= x:ans -= 2 * (x - 1)else :ans -= 1 + (n - x - 1) * 2
print("最终三角形个数:{}".format(ans))
加油