您的位置:首页 > 其它

华为实习生笔试练习4.9

2015-04-09 16:46 281 查看
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
, 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;
}
else
result_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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: