设为首页 加入收藏

TOP

华为最新笔试题——编程题及答案(四)
2014-11-23 20:20:24 来源: 作者: 【 】 浏览:63
Tags:华为 最新 试题 编程 答案
t tem;
int n=strlen(sub_str);
while (str[k]!=’\0′)
{
tem=k;
for(int i=0;i {
if(sub_str[i]==str[k]) k++;
else
{
break;
}
}
if(i==n) count++;
else
{
result_str[j++]=str[tem];
k=tem+1;
}
}
result_str[j]='\0';
return count;
}
int main()
{
char *str="aaadbaadcd";
char *sub="aad";
char res[50]="";
int count=delete_sub_str(str,sub,res);
printf("子字符串的个数是:%d\n",count);
printf("删除子字符串后:%s\n",res);
return 0;
}
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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"
using namespace std;
void change(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void bubblesort(int data[],int n,int index[])//冒泡排序并记录排序后下标
{
int temp=0;
for(int j=0;j index[j]=j;
for(int i=0;i {
for (int j=i+1;j {
if(data[i]>data[j])
{
change(&data[i],&data[j]);
change(&index[i],&index[j]);
}
}
}
}
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int *sort_task=new int[n];
int *index=new int[n];
for(int i=0;i {
sort_task[i]=task[i];
}
bubblesort(sort_task,n,index);
i=0;
while(sort_task[i]<50)
{
system_task[i]=index[i];
i++;
}
system_task[i]=-1;
for(int m=0;m<=i;m++)
{
printf("%d ",system_task[m]);}
printf("\n");
int k=0;
while(sort_task[i]>50&&sort_task[i]<=255)
{
user_task[k++]=index[i++];
}
user_task[k]=-1;
for(int l=0;l<=k;l++)
{
printf("%d ",user_task[l]);}
printf("\n");
delete sort_task;
delete index;
}
void main()
{
int task[] = {0, 30, 155, 1, 80, 300, 170,40,99};
int n=sizeof(task)/sizeof(int);
int *system_task=new int[n];
int *user_task=new int[n];
scheduler(task, n, system_task, user_task);
}
简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现 0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如 8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况。
要求实现函数: int calculate(int len,char *expStr)
【输入】 int len: 字符串长度;
char *expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
示例
1) 输入:char *expStr = “1+4*5-8/3”
函数返回:19
2) 输入:char *expStr = “8/3*3”
函数返回:6
答案:
#include
#include
#include “assert.h”
struct stack
{//存放后续排列的表达式,模拟栈
char str[80];
int top;
};
struct sstack
{//存放计算表达式的值,模拟栈
int str[80];
int top;
};
int calculate(int len,char *expStr)
{
char *postexp=new char[len+1];
stack opstack;
sstack calstack;
calstack.top=-1;
opstack.top=-1;
int i=0;
int k=0;
while(expStr[i]!=’\0′)
{
if (expStr[i]>=’0′&&expStr[i]<='9')
{
postexp[k++]=expStr[i];
}
else if(expStr[i]=='+'||expStr[i]=='-')
{
while(opstack.top>=0)
{
postexp[k++]=opstack.str[opstack.top--];
}
opstack.top++;
opstack.str[opstack.top]=expStr[i];
}
else if(expStr[i]==’*'||expStr[i]==’/')
{
while(opstack.top>=0&&(opstack.str[opstack.top]==’*’
||opstack.str[opstack.top]==’/'))
{
postexp[k++]=opstack.str[opstack.top--];
}
opstack.top++;
opstack.str[opstack.top]=expStr[i];
}
i++;
}
while(opstack.top>=0)
{
postexp[k++]=opstack.str[opstack.top--];
}
int temp1=0;
int temp2=0;
for(i=0;i {
if(postexp[i]>=’0′&&postexp[i]<='9')
{
calstack.top++;
calstack.str[calstack.top]=postexp[i]-'0';
}
else if(postexp[i]=='+')
{
temp1=calstack.st
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇构建企业网络类面试题 下一篇操作系统笔试题及答案(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: