链家笔试题2(2018.4.8)

xiaoxiao2021-02-28  27

题目: 在迷迷糊糊的大草原上,小红捡到了n根木棍,第i根木棍的长度为i,小红现在很开心。 她想选出其中的三根木棍组成美丽的三角形。 但是小明想捉弄小红,想去掉一些木棍,使得小红任意选三根木棍都不能组成三角形。 请问小明最少去掉多少根木棍呢? 输入 本题包含若干组测试数据。 对于每一组测试数据。 第一行一个n,表示木棍的数量。 满足 1<=n<=100000 输出 输出最少数量 样例输入 4 样例输出 1

解法:其实考察的是斐波那契数列,f(n)=f(n-1)+f(n-2)的时候刚好不能凑成三角形,也就是说,考虑可以留下来的木棍的数量为

1 2 3 5 8 13 21...这个时候,任意后边的两个数相加不会大于前边的数,这个时候可以保证没有三角形。

int main() { while(1) { int m,n=0; cin >> m; if (m < 4) { cout << 0 << endl; continue; } vector<int> zla = { 1,2 }; for (int i = 0; ; i++) { n=zla[i] + zla[i + 1]; if (n <= m) zla.push_back(n); else break; } cout << m - zla.size() << endl; } return 0; }

转载请注明原文地址: https://www.6miu.com/read-2624823.html

最新回复(0)