华为实习生笔试练习4.9

来源:互联网 发布:淘宝一千多的硅胶娃娃 编辑:程序博客网 时间:2024/04/29 16:03

1. 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。例如:input[] = {3, 6, 1, 9, 7}   output[] = {3, 7, 9, 6, 1};     input[] = {3, 6, 1, 9, 7, 8}    output[] = {1, 6, 8, 9, 7, 3} 

#include<iostream>#include<algorithm>using namespace std;bool Compare(int a, int b){if (a > b)return true;return false;}int main(){int n;int s[100];int s_sort[100];int f_ptr, q_ptr;cin >> n;f_ptr = q_ptr = n / 2;for (int i = 0; i < n; i++){cin >> s[i];}sort(s, &s[n], Compare);s_sort[q_ptr] = s[0];f_ptr--;q_ptr++;int index = 1;while (index<n){s_sort[f_ptr--] = s[index++];if (q_ptr < n)s_sort[q_ptr++] = s[index++];}for (int i = 0; i < n; i++)cout << s_sort[i] << " ";system("pause");return 0;}

2.操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50 且 <= 255。优先级大于 255 的为非法任务,应予以剔除。现有一任务队列 task[],长度为 n,task 中的元素值表示任务的优先级,数值越小,优先级越高。函数 scheduler 实现如下功能,将 task[] 中的任务按照系统任务用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在 task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入//队顺序排列(即先入队的任务排在前面),数组元素为-1 表示结束。例如:task[] = {0,30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2,6, -1}// 函数接口 void scheduler(int task[], int n, int system_task[], int user_task[])

#include<iostream>#include<vector>#include<algorithm>using namespace std;class  Task{public:Task(int p, int i){ priority = p; id = i; };int getPri(){ return priority; }int getId(){ return id; }private:int priority;int id;};bool Compare(Task a, Task b){if (a.getPri() < b.getPri())return true;return false;}void schedual(int* task, int* system_task, int* user_task, int n){int sys_ptr = 0, user_ptr = 0;vector<Task> schedual_queue;for (int i = 0; i < n; i++){Task tmpTask = Task(task[i], i);schedual_queue.push_back(tmpTask);}sort(schedual_queue.begin(), schedual_queue.end(), Compare);for (int i = 0; i < n; i++){if (schedual_queue.at(i).getPri() < 50)system_task[sys_ptr++] = schedual_queue.at(i).getId();else if (schedual_queue.at(i).getPri() <= 255)user_task[user_ptr++] = schedual_queue.at(i).getId();}system_task[sys_ptr] = user_task[user_ptr] = -1;int i = 0;while (system_task[i] != -1)cout << system_task[i++]<<" ";cout << endl;i = 0;while (user_task[i] != -1)cout << user_task[i++] << " ";}int main(){int n;int task[100];int system_task[100], user_task[100];cin >> n;for (int i = 0; i < n; i++)cin >> task[i];schedual(task, system_task, user_task, n);system("pause");return 0;}

3. 问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数: int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】 str:输入的被操作字符串 sub_str:需要查找并删除的特定子字符串【输出】 result_str:在 str 字符串中删除所有 sub_str 子字符串后的结果【返回】 删除的子字符串的个数

#include<iostream>#include<string>using namespace std;int compare(const char* str, const char* substr){int index = 0;while (substr[index] != 0){if (str[index] != substr[index])return -1;index++;}return index;}int delete_sub_str(const char *str, const char *sub_str, char *result_str){int count = 0;int ptr = 0,r_ptr=0;while (str[ptr] != 0){if (str[ptr] == sub_str[0]){int index = compare(&str[ptr], sub_str);if (index>=0){count++;ptr = ptr + index;}elseresult_str[r_ptr++] = str[ptr++];}else    result_str[r_ptr++] = str[ptr++];}result_str[r_ptr] = 0;return count;}int main(){char oldstring[100], deletestring[100];char resultstring[100];cin >> oldstring;cin >> deletestring;int num;num = delete_sub_str(oldstring, deletestring, resultstring);cout << num << endl;cout << resultstring;system("pause");return 0;}


0 0