- 浏览: 1615087 次
文章分类
最新评论
-
Top_raine:
,求Java大神,负责移动警务项目,熟悉MQTT、XMPP、 ...
位置服务LBS -
OHdream:
虽然不知道你是不是拷贝的,但是问下你这个方法真得有用吗?你自己 ...
eclipse+lomboz配置说明 -
soutnila:
如果你使用的是jquery1.6以上的版本你应该使用prop( ...
Jquery 获取checkbox的checked问题
2012届华为校园招聘上机考试题目(9月6日下午1点场)
1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 *0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。
函数接口 int cal_score(int score[], int judge_type[], int n)
2、给定一个数组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}
函数接口 void sort(int input[[, int n, int output[])
3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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 <stdio.h>
int cal_score(int score[], int judge_type[], int n);
void main()
{
int score[10]={70,80,90,99,98,97,96,88,79,90};
int judge_type[10]={1,2,2,1,2,2,2,1,2,2};
printf("%d\n",(int)cal_score(score,judge_type,10));
}
int cal_score(int score[], int judge_type[], int n)
{
int i,zc=0;
int zs=0,ds=0;
for(i=0;i<n;i++)
{
if(judge_type==1)
{
zs+=score;
zc++;
}
if(judge_type==2)
ds+=score;
}
int zps=(int)(zs/zc);
int dps=(int)(ds/(n-zc));
return (zps*0.6+dps*0.4);
}
#include <stdio.h>
#define CNT 6
void sort(int input[], int n, int output[]);
void main()
{
int input[CNT]={3, 6, 1, 9, 7, 8,};
int output[CNT];
sort(input,CNT,output);
for(int i=0;i<CNT;i++)
printf("%d,",output);
printf("\n");
}
void sort(int input[], int n, int output[])
{
int mid=n/2;
int tmp;
int i,j;
for(i=n-1;i>0;i--)
for(j=0;j<i;j++)
{
if(input[j]<input[j+1])
{
tmp=input[j];
input[j]=input[j+1];
input[j+1]=tmp;
}
}
output[mid]=input[0];
for(i=1;i<=mid;i++)
{
output[mid-i]=input[2*i-1];
output[mid+i]=input[2*i];
}
}
#define CNT 9
void scheduler(int task[], int n, int system_task[], int user_task[]);
void main()
{
int task[CNT] = {0, 30, 155, 1, 80, 300, 170, 40, 99};
int system_task[CNT];
int user_task[CNT];
scheduler(task,CNT,system_task,user_task);
}
void scheduler(int task[], int n, int system_task[], int user_task[])
{
int i,j=0,k=0;
for(i=0;i<n;i++)
{
if(task<50)
{
system_task[j]=i;
j++;
}
if(task>=50 && task<=255)
{
user_task[k]=i;
k++;
}
}
int jj=j;
int tmp;
for(i=0;i<jj-1;i++)
for(j=i+1;j<jj;j++)
if(task[system_task]>task[system_task[j]])
{
tmp=system_task;
system_task=system_task[j];
system_task[j]=tmp;
}
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
if(task[user_task]>task[user_task[j]])
{
tmp=user_task;
user_task=user_task[j];
user_task[j]=tmp;
}
system_task[jj]=-1;
user_task[k]=-1;
for(i=0;i<=jj;i++)
printf("%d,",system_task);
printf("\n");
for(i=0;i<=k;i++)
printf("%d,",user_task);
printf("\n");
}
运行的的二题答案,自己写的方法太长了了,也许是几的程序不怎么过硬,老是写不出最少的代码。
struct task_node{
int task_priority,
int position
}
设定一个 struct task_node task_list[]; 把任务列表中的任务优先级记录在staruct 的task_priority中,把位置记录在position中。
然后对task-list进行排序。对于0~49的,把位置只接存入system_task中, 50~255的,把节点位置号存入user_task中。
即可。
不知,大家意见如何?
- voidscheduler(inttask[],intn,intsystem_task[],intuser_task[])
- {
- inttemp1=0;
- inttemp2=0;
- for(inti=0;i<n;i++)
- {
- if(50>task[i])
- system_task[temp1++]=i*1000+task[i];//低两位是系统任务优先级,第四位是对应的task数组下标
- elseif(255>=task[i])
- user_task[temp2++]=i*1000+task[i];//低三位是用户任务优先级,第四位是对应的task数组下标
- }
- system_task[temp1]=-1;
- user_task[temp2]=-1;
- bubbleSort(system_task,temp1);//按低两位的优先级进行冒泡排序
- adjust(system_task,temp1);//把数组system_task中的值调整为对应的task数组的下标
- bubbleSort(user_task,temp2);//按低三位的优先级进行冒泡排序
- adjust(user_task,temp2);//把数组user_task中的值调整为对应的task数组的下标
- print(system_task,temp1+1);
- print(user_task,temp2+1);
- }
- int_tmain(intargc,_TCHAR*argv[])
- {
- inttask[]={0,30,155,1,80,300,170,40,99};
- intsystem_task[9],user_task[9];
- scheduler(task,9,system_task,user_task);
- return0;
- }
void scheduler(int task[], int n, int system_task[], int user_task[]) { int temp1 = 0; int temp2 = 0; for(int i = 0;i<n;i++) { if(50 > task[i]) system_task[temp1++] = i*1000+task[i]; //低两位是系统任务优先级,第四位是对应的task数组下标 else if(255 >= task[i]) user_task[temp2++] = i*1000+task[i]; //低三位是用户任务优先级,第四位是对应的task数组下标 } system_task[temp1] = -1; user_task[temp2] = -1; bubbleSort(system_task,temp1); //按低两位的优先级进行冒泡排序 adjust(system_task,temp1); //把数组system_task中的值调整为对应的task数组的下标 bubbleSort(user_task,temp2); //按低三位的优先级进行冒泡排序 adjust(user_task,temp2); //把数组user_task中的值调整为对应的task数组的下标 print(system_task,temp1+1); print(user_task,temp2+1); } int _tmain(int argc, _TCHAR* argv[]) { int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}; int system_task[9],user_task[9]; scheduler(task,9,system_task,user_task); return 0; }
- #include"stdafx.h"
- /*冒泡排序*/
- voidbubbleSort(intlist[],intn)
- {
- intexchange=1;
- for(inti=0;i<n&&exchange;i++)
- {
- exchange=0;
- for(intk=0;k<n-i-1;k++)
- {
- if(list[k]%1000>list[k+1]%1000)
- {
- list[k]=list[k]^list[k+1];
- list[k+1]=list[k]^list[k+1];
- list[k]=list[k]^list[k+1];
- exchange=1;
- }
- }
- }
- }
- /*调整数组中元素的值为对应的task数组中的下标*/
- voidadjust(intlist[],intn)
- {
- for(inti=0;i<n;i++)
- list[i]=list[i]/1000;
- }
- /*打印输出*/
- voidprint(intlist[],intn)
- {
- for(inti=0;i<n;i++)
- printf("%d",list[i]);
- printf("\n");
- }
#include "stdafx.h" /*冒泡排序*/ void bubbleSort(int list[],int n) { int exchange = 1; for(int i = 0;i<n&&exchange;i++) { exchange = 0; for(int k = 0;k < n-i-1;k++) { if(list[k]%1000 > list[k+1]%1000) { list[k] = list[k]^list[k+1]; list[k+1] = list[k]^list[k+1]; list[k] = list[k]^list[k+1]; exchange = 1; } } } } /*调整数组中元素的值为对应的task数组中的下标*/ void adjust(int list[],int n) { for(int i = 0;i < n;i++) list[i] = list[i]/1000; } /*打印输出*/ void print(int list[],int n) { for(int i = 0;i < n;i++) printf("%d ",list[i]); printf("\n"); }
- #include"stdafx.h"
- /*冒泡排序*/
- voidbubbleSort(intlist[],intn)
- {
- intexchange=1;
- for(inti=0;i<n&&exchange;i++)
- {
- exchange=0;
- for(intk=0;k<n-i-1;k++)
- {
- if(list[k]<list[k+1])
- {
- list[k]=list[k]^list[k+1];
- list[k+1]=list[k]^list[k+1];
- list[k]=list[k]^list[k+1];
- exchange=1;
- }
- }
- }
- }
- voidsort(intinput[],intn,intoutput[])
- {
- inti;
- for(i=0;i<(n+1)/2;i++)
- {
- output[n/2+i]=input[2*i];
- output[n/2-(i+1)]=input[2*i+1];
- }
- output[n/2+i]=input[2*i];
- if(i==n/2)
- output[0]=input[n-1];
- }
- int_tmain(intargc,_TCHAR*argv[])
- {
- intinput[5]={3,6,1,9,7};
- intoutput[5]={0,0,0,0,0};
- //先从大到小排序,然后按规律放入输出数组中
- bubbleSort(input,5);
- sort(input,5,output);
- for(inti=0;i<5;i++)
- printf("%d",output[i]);
- return0;
- }
#include "stdafx.h" /*冒泡排序*/ void bubbleSort(int list[],int n) { int exchange = 1; for(int i = 0;i<n&&exchange;i++) { exchange = 0; for(int k = 0;k < n-i-1;k++) { if(list[k] < list[k+1]) { list[k] = list[k]^list[k+1]; list[k+1] = list[k]^list[k+1]; list[k] = list[k]^list[k+1]; exchange = 1; } } } } void sort(int input[], int n, int output[]) { int i; for(i = 0;i<(n+1)/2;i++) { output[n/2+i] = input[2*i]; output[n/2-(i+1)] = input[2*i+1]; } output[n/2+i] = input[2*i]; if(i == n/2) output[0] = input[n-1]; } int _tmain(int argc, _TCHAR* argv[]) { int input[5] = {3,6,1,9,7}; int output[5] = {0,0,0,0,0}; //先从大到小排序,然后按规律放入输出数组中 bubbleSort(input,5); sort(input,5,output); for(int i = 0;i<5;i++) printf("%d ",output[i]); return 0; }
- #include"stdafx.h"
- intcal_score(intscore[],intjudge_type[],intn)
- {
- intpronum=0;//记录专家评委的个数
- intproscore=0;//记录专家评委的总评分
- intpeoscore=0;//记录大众评委的总评分
- for(inti=0;i<n;i++)
- {
- if(1==judge_type[i])
- {
- proscore+=score[i];
- pronum++;
- }
- else
- peoscore+=score[i];
- }
- if(n!=pronum)
- return(0.6*proscore+0.4*peoscore);
- else
- returnproscore;
- }
- int_tmain(intargc,_TCHAR*argv[])
- {
- intjudge_type[6]={1,1,1,1,1,1};
- intscore[6]={3,4,3,2,5,3};
- intresult=cal_score(score,judge_type,6);
- printf("%d\n",result);
- return0;
- }
#include "stdafx.h" int cal_score(int score[], int judge_type[], int n) { int pronum = 0; //记录专家评委的个数 int proscore = 0; //记录专家评委的总评分 int peoscore = 0; //记录大众评委的总评分 for(int i = 0;i<n;i++) { if(1 == judge_type[i]) { proscore += score[i]; pronum++; } else peoscore +=score[i]; } if(n != pronum) return (0.6*proscore+0.4*peoscore); else return proscore; } int _tmain(int argc, _TCHAR* argv[]) { int judge_type[6] = {1,1,1,1,1,1}; int score[6] = {3,4,3,2,5,3}; int result = cal_score(score,judge_type,6); printf("%d\n",result); return 0; }
第一题标比较简单,就不说了。
第二题先把原数组从大到小排序,然后按规律放入输出数组中。
第三题先把task数组中的系统任务和用户任务分开,分别放入system_task和user_task数组中,不过数组中的元素的值不是放的优先级,比如task[1]=30,那么数组system_task中放的值就是1000*1+30=1030;task[2]=155,那么数组user_task中放的值就是1000*2+155=2155。
算法的效率也许不高,代码贴出来希望大家指教下。
curAvg = (curScore - curAvg) / curNum + curAvg
这个算法至少可以保证不出现溢出错误。(前提是输入数据本身不存在溢出情况,并且平均值基本上小于溢出值的1/2)。基本上我们可以保证溢出值是平均值的100倍以上,比如平均值按照100算,我们可以定义float。
这个算法的一个缺点就是可能产生误差,因为curScore是float存储的,比如9.3636363636363636,必然有被丢弃的部分。每次计算都会累计误差。但根据统计学的原理,这个误差不会无限放大,因为有正负,误差会在一定范围内浮动。
为了减少误差,可以用double。
不考虑输入数据的合法性,不代表你可以随便用。
大众评委太多了怎么办?超出数据范围怎么办?这些不可能不考虑。
void scheduler(int task[], int n, int system_task[], int user_task[])
{
for(int i = 0,iS = 0,iU = 0; i < n; i++)
{
if(task < 50)
{
for(int j = iS-1; j >= 0 && (task[system_task[j]] > task); j--) //插入排序法
{
system_task[j+1] = system_task[j];
}
system_task[j+1] = i;
iS++;
}
else if(task <= 255)
{
for(int j = iU-1; j >= 0 && (task[user_task[j]] > task); j--) //插入排序法
{
user_task[j+1] = user_task[j];
}
user_task[j+1] = i;
iU++;
}
}
system_task[iS] = -1;
user_task[iU] = -1;
}
weida
{
int sys_cnt = 0; // 系统任务计数
int user_cnt = 0; // 用户任务计数
for (int i = 0; i < n; i++)
{
if (task < 50) // 系统任务
{
system_task[sys_cnt] = i;
int temp1 = sys_cnt++;
while (temp1 > 0 && task[system_task[temp1]] < task[system_task[temp1-1]]) // 交换排序思想
{
swap(system_task[temp1], system_task[temp1-1]);
temp1--;
}
}
else if (task >= 50 && task <= 255) // 用户任务
{
user_task[user_cnt] = i;
int temp2 = user_cnt++;
while (temp2 > 0 && task[user_task[temp2]] < task[user_task[temp2-1]])
{
swap(user_task[temp2], user_task[temp2-1]);
temp2--;
}
}
}
system_task[sys_cnt] = -1;
user_task[user_cnt] = -1;
}
void swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
void sort(int input[], int n, int output[])
{
for (int i = 0; i < n-1; i++) // 冒泡排序,从大到小
{
for (int j = 0; j < n-1-i; j++)
{
if (input[j] < input[j+1])
{
swap(input[j], input[j+1]);
}
}
}
int mid = n/2; // 计算中间位置
int left = mid-1; // 左下标
int right = mid+1; // 右下标
int cnt = 0;
output[mid] = input[cnt++];
while (cnt < n)
{
if (cnt < n)
{
output[left--] = input[cnt++];
}
if (cnt < n)
{
output[right++] = input[cnt++];
}
}
}
第二题:采用冒泡排序法,取每趟沉底地元素,然后将其摆到相应的位置,怎样在排序中,就解决了问题。
void usort(int *source, int n){
int mid = n/2;
int i,j,l;
for (i = 0; i < mid; i++){
int min1 = source;
int min2 = source[n-i-1];
for (j = i; j < n-i; j++){//这两个for交换顺序即可得到不一样的排列
if(min1 > source[j]) {
min1 = source[j];
source[j] = source;
source = min1;
}
}
for (l = n-i-2; l >= i+1; l--){
if(min2 > source[l]){
min2 = source[l];
source[l] = source[n-i-1];
source[n-i-1] = min2;
}
}
}
}
2)java的编程环境是什么?
笨的,他不要求就是看你自己的编程风格,看你真正写过程序没。
谢谢
先排序input。然后依次从OUTPUT的特殊顺序放置。做两指针,同时指向OUPUT的中间,一前一后轮流移动指针放东西。轮流的方式可以采用标志,也可以通过判断指针所指的内容是否为空来判断。前提是OUTPUT初始化过。
在input的排序过程中依次取出最大值,同时将这个值传入output。
n/2+1+((i/2)+1)*(i%2==0?-1:1)
相关推荐
2012届华为校园招聘上机考试题目,附答案!!
2012届华为校园招聘上机考试题目(9月6日下午1点场)--附上自己写的代码,欢迎指正
2012届华为校园招聘上机考试题目及答案Java和C++两种方式实现
2012届华为校园招聘上机考试题.docx
XXXX届华为校园招聘上机考试题.docx
【招聘面试)届华为校园招聘上机考试题.docx
华为上机不是很难,但是一些细节需要注意,这是华为的一些试题,一定要自己写出来,不要抄出来,输入输出很重要。自己琢磨一下
华为校园招聘电子科大上机题目.doc
2015年华为校园招聘的机考题目。包含参考答案,参考答案为C++范例
教育精品资料
这是2012年华为校园招聘的上机题,对想去华为工作的应届毕业生有帮助
华为2016校园招聘上机笔试题及答案.pdf
2012,华为,机试,2012华为校园招聘上机笔试题 机试.doc
2014华为校园招聘上机题,绝对有帮助。
2012华为校园招聘上机试题大全(软件)
华为校园招聘软件研发上机测试题及部分解答
2013年华为四川大学校园招聘上机题,包含题目,考试须知,还有华为提供的编程框架,大家可以下下来先看一下,熟悉一下考试环境,以后自己碰见了就会心里有底。祝好运。