帮我写个程序1) 输入10个职工的姓名和职工号; 2) 按职工号从小到大排序,姓名也相应改变顺序; 3) 要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工的职工号,输出该职工的姓名。
时间: 2023-08-31 12:23:41 浏览: 83
### 回答1:
好的,我理解了你的要求。以下是程序:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct Employee {
string name;
int number;
};
bool compare(Employee e1, Employee e2) {
return e1.number < e2.number;
}
int binarySearch(Employee arr[], int n, int x) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid].number == x) {
return mid;
}
else if (arr[mid].number < x) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
int main() {
Employee arr[10];
cout << "请输入10个职工的姓名和职工号:" << endl;
for (int i = 0; i < 10; i++) {
cin >> arr[i].name >> arr[i].number;
}
sort(arr, arr + 10, compare);
cout << "排序后的结果为:" << endl;
for (int i = 0; i < 10; i++) {
cout << arr[i].name << " " << arr[i].number << endl;
}
int x;
cout << "请输入要查找的职工号:" << endl;
cin >> x;
int index = binarySearch(arr, 10, x);
if (index == -1) {
cout << "没有找到该职工" << endl;
}
else {
cout << "该职工的姓名是:" << arr[index].name << endl;
}
return 0;
}
请注意,本程序仅供学习参考,可能存在错误,不可用于生产环境。
### 回答2:
可以使用以下的程序来实现需求:
```python
def binary_search(employees, target_id):
left = 0
right = len(employees) - 1
while left <= right:
mid = (left + right) // 2
if employees[mid][0] == target_id:
return employees[mid][1]
elif employees[mid][0] < target_id:
left = mid + 1
else:
right = mid - 1
return "查无此人"
def main():
employees = []
for i in range(10):
name = input("请输入第{}个职工的姓名:".format(i+1))
id = int(input("请输入第{}个职工的职工号:".format(i+1)))
employees.append((id, name))
employees.sort()
target_id = int(input("请输入要查询的职工号:"))
result = binary_search(employees, target_id)
print("该职工的姓名是:", result)
if __name__ == "__main__":
main()
```
这个程序首先使用一个空的列表`employees`来存储职工的姓名和职工号。然后,通过循环输入10个职工的姓名和职工号,将其作为一个元组`(id, name)`添加到列表`employees`中。
接着,使用`employees.sort()`对`employees`列表进行排序,排序会按照职工号从小到大的顺序进行排序,姓名也相应改变顺序。
最后,通过调用`binary_search`函数,输入要查询的职工号,函数会使用折半法在已排序的`employees`列表中查找对应的职工姓名,并将结果输出。如果没有找到对应职工号的职工姓名,则会输出"查无此人"。
注意,这里假设输入的职工号都是正整数。如果需要处理负数的职工号或其他类型的职工号,在代码中需要进行相应的修改。
### 回答3:
下面是一个使用Python编写的程序来实现你的需求:
```python
def binary_search(employee_list, target_num):
left = 0
right = len(employee_list) - 1
while left <= right:
mid = (left + right) // 2
if employee_list[mid][1] == target_num:
return employee_list[mid][0]
elif employee_list[mid][1] < target_num:
left = mid + 1
else:
right = mid - 1
return "未找到该职工号对应的姓名"
def main():
employee_list = []
for i in range(10):
name = input("请输入第{}个职工的姓名:".format(i+1))
num = int(input("请输入第{}个职工的职工号:".format(i+1)))
employee_list.append([name, num])
employee_list.sort(key=lambda x: x[1])
target_num = int(input("请输入要查找职工的职工号:"))
target_name = binary_search(employee_list, target_num)
print("职工{}的姓名是:{}".format(target_num, target_name))
if __name__ == "__main__":
main()
```
这个程序首先使用一个`employee_list`列表来存储10个职工的姓名和职工号。然后,使用`sort()`函数对职工列表进行排序,按照职工号从小到大进行排序。
接下来,使用折半法来搜索职工号对应的职工姓名。在`binary_search()`函数中,使用二分查找的方法在排序后的职工列表中查找目标职工号。如果找到,则返回对应的职工姓名;如果没有找到,则返回一个提示信息。
在`main()`函数中,使用一个循环向用户输入10个职工的姓名和职工号,并将其添加到职工列表。然后,根据用户输入的目标职工号调用`binary_search()`函数来查找对应的职工姓名,并将结果输出给用户。