POJ 1003 Hangover - 搜索算法 - 二分查找法
2014-02-24 22:11
393 查看
POJ 1003 Hangover
题意:寻找序列中不小于给定某数的最小数的序号。难度:1星。
理清题意,我的直接反应就是用搜索算法。于是就准备写二分查找法的代码。写的过程中发现自己对二分查找法掌握的不扎实:首先是算法的基本框架不熟悉,再就是把握不好算法的出口。写完提交AC后,在讨论区中发现直接算看起来还简单一些,那也写一下吧。
温习一下二分查找法:
题解代码1:(二分查找法)
题解代码2:
题意:寻找序列中不小于给定某数的最小数的序号。难度:1星。
理清题意,我的直接反应就是用搜索算法。于是就准备写二分查找法的代码。写的过程中发现自己对二分查找法掌握的不扎实:首先是算法的基本框架不熟悉,再就是把握不好算法的出口。写完提交AC后,在讨论区中发现直接算看起来还简单一些,那也写一下吧。
温习一下二分查找法:
int BiSearch(float sum[], int low, int high, float c) {/* 二分查找法,返回sum[]大于等于c的最小序号 */ while (1 < high - low) { int mid = (low + high) >> 1; if (c < sum[mid]) { high = mid; } else { low = mid; } } return sum[low] == c ? low : high; }
题解代码1:(二分查找法)
/*
* POJ 1003 Hangover
* 寻找序列中不小于c的最小数的序号;
*
* 直观反馈是用查找法;
* 发现二分查找法不扎实!!
*
*/
#include <iostream>
using namespace std;
int BiSearch(float [], int, int, float);
int main()
{
float sum[277] = {0};
float c;
int i, n;
for (i = 1; i < 277; i++)
{
sum[i] = sum[i - 1] + 1.0 / (i + 1);
}
while (1)
{
cin >> c;
if (0 == c)
{
break;
}
n = BiSearch(sum, 0, 277, c);
cout << n << " card(s)" << endl;
}
return 0;
}
int BiSearch(float sum[], int low, int high, float c) {/* 二分查找法,返回sum[]大于等于c的最小序号 */ while (1 < high - low) { int mid = (low + high) >> 1; if (c < sum[mid]) { high = mid; } else { low = mid; } } return sum[low] == c ? low : high; }
题解代码2:
/* * POJ 1003 Hangover * 寻找序列中不小于c的最小数的序号; * * 直接计算……; * * */ #include <iostream> using namespace std; int main() { float c; float sum; int i; while (1) { cin >> c; if (!c) { break; } for (i = 1, sum = 0; sum < c; i++) { sum += 1.0 / (i + 1); } cout << --i << " card(s)" << endl; } return 0; }
相关文章推荐
- POJ 百练 1003: Hangover
- POJ 1003 Hangover
- POJ 1003 Hangover
- poj 1003Hangover
- POJ-1003-Hangover
- poj 1003:Hangover(水题,数学模拟)
- [POJ 1003] Hangover C++解题
- POJ 1003 Hangover 水题
- poj 1003:Hangover
- POJ1003 Hangover
- poj 1003 Hangover
- POJ 百炼 保研机试 1003:Hangover
- 【POJ-1003】Hangover
- POJ-1003-Hangover
- poj 1003 Hangover
- POJ 1003 - Hangover
- OpenJudge / Poj 1003 Hangover
- poj 1003 (nyoj 156) Hangover
- POJ 1003 Hangover 悬空
- POJ 1003.Hangover