试题 算法训练 活雷锋
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
寻找“活雷锋”:经过警察叔叔的走访调查,知道了“活雷锋”每次做完好事后,别人问起他的名字时,他总是说自己是“雷锋16”,而他家的门上也写着数字“16”。你能通过这个线索找到“活雷锋”的家吗?
输入格式
输入4行5列的数字,查找16
输出格式
输出1行,如果有16就输出‘yes',没有就输出’no'。
样例输入
一个满足题目要求的输入范例。
例:
1 2 3 4 5
2 3 4 5 6
21 3 3 4 6
2 4 5 6 16
样例输出
与上面的样例输入对应的输出。
例:
yes
数据规模和约定
输入数据中每一个数的范围。
例:0<n,m<1000000。
题解:
#include <iostream>
#include <algorithm>
using namespace std;
bool f2(int num[5]) {
int left = 0;
int right = 4;
int mid;
while (left <= right) {
mid = left + (right - left) / 2;
if (16 > num[mid]) {
left = mid + 1;
}
else if (16 < num[mid]) {
right = mid - 1;
}
else {
return true;
}
}
return false;
}
int main() {
int a[4][5];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
cin >> a[i][j];
}
}
for (int i = 0; i < 4; i++) {
sort(a[i], a[i] + 5);
if (f2(a[i])) {
cout << "yes";
return 0;
}
}
cout << "no";
return 0;
}
二分加排序,要不然应该会超时。