2012华为成都上机题目C++编程

1、选秀节目打分,分为专家评委和大众评委,score[]数组里面存储每个评委打的分数,judge_type[]里存储与 score[]数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i]== 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分  * 0.6 +大众评委 *0.4,总分取整。如果没有大众评委,则总分 =专家评委平均分,总分取整。函数最终返回选手得分。

 函数接口   int cal_score(int score[], intjudge_type[], int n) 

#include <iostream>
using namespace std;
int ave=0;
int cal_score(int score[], int judge_type[], int n) 
{
	int aa;
	int i;
	int sum_x=0,num_x=0,sum_y=0,num_y=0;
	for(i=0;i<n;i++)
	{
		if(judge_type[i]==1)
		{
			sum_x+=score[i];
			num_x++;
		}
		else if(judge_type[i]==2)
		{
			sum_y+=score[i];
			num_y++;
		}
	}
	aa=ave=(sum_x/num_x)*0.6+(sum_y/num_y)*0.4;
	return aa;
}
void main()
{
	
	int score[]={90,80,87,89,91};
	int judege[]={1,2,1,1,1};
	int a=cal_score(score,judege,5);
	cout<<a;
	system("pause");

}



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}

思路:先排序,然后取下标为奇数的组成一个数组,但下标为偶数的组成一个数组,然后将这两个数组弄给output;

#include <iostream>
using namespace std;
void maopaosort(int input[],int len)//冒泡排序
{
	int i,j;
	int temp;
	for(i=0;i<len;i++)
	{
		for(j=i;j<len-1;j++)
		{
			if(input[j]>input[j+1])
			{
				temp=input[j];
				input[j]=input[j+1];
				input[j+1]=temp;
			}
		}
	}
}
void sort(int input[],int len)//第二次排序
{
	maopaosort(input,len);//冒泡排序
	int media,i,j=0;;
	int lint[1000],rint[1000];//左右两边的数组
	int mymax=input[len-1];//保存最大值
	if((len%2)!=0)//奇数个数字
	{
		media=(len-1)/2;
		for(i=0;i<media;i++)
		{
			rint[i]=input[j];
			lint[i]=input[j+1];
			j+=2;
		}
		int len1=media;
		for(i=0;i<len;i++)
		{
			if(i<media)
				input[i]=lint[i];
			else if(i==media)
				 input[i]=mymax;
			else if(i>media)
				input[i]=rint[--len1];
		}
	}
	else//偶数个数字
	{
		media=len/2;
		for(i=0;i<media;i++)
		{
			lint[i]=input[j];
			rint[i]=input[j+1];
			j+=2;
		}
		int len2=media;
		for(i=0;i<len;i++)
		{
			if(i<media)
				input[i]=lint[i];
			else if(i>=media)
				input[i]=rint[--len2];
		}

	}
}
void main()
{
	int i;
	int a[]={3,1,6,9,7,};
	int len=sizeof(a)/sizeof(a[0]);
	cout<<len<<endl;
	sort(a,len);
	for(i=0;i<len;i++)
	cout<<a[i]<<" ";
	cout<<"\n结束";
	system("pause");
}



 3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为ntask中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[]中的任务按照系统任务、用户任务依次存放到 system_task[]数组和user_task[]数组中(数组中元素的值是任务在task[]数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。

 函数接口   void scheduler(int task[], int n, int system_task[], int user_task[])


#include <iostream>
using namespace std;
void scheduler(int task[], int n, int system_task[], int user_task[])
{
	int i,x=0,y=0;
	for(i=0;i<n;i++)
	{
		if(task[i]<50)
				system_task[x++]=i;
		else if (task[i]>=50&&task[i]<=255)
			    user_task[y++]=i;
	}
	for(i=0;i<x;i++)
		cout<<system_task[i]<<" ";
	cout<<endl;
	for(i=0;i<y;i++)
		cout<<user_task[i]<<" ";
	cout<<endl;
	int j,k;
	int temp;
	for(j=0;j<x;j++)///排序system_task
	{
		for(k=j;k<x-1;k++)
		{
			if(task[system_task[k]]>task[system_task[k+1]])
			{
				temp=system_task[k];
				system_task[k]=system_task[k+1];
				system_task[k+1]=temp;

			}
		}
	}
	system_task[x]=-1;
	for(j=0;j<y;j++)///排序user_task
	{
		for(k=j;k<y-1;k++)
		{
			if(task[user_task[k]]>task[user_task[k+1]])
			{
				temp=user_task[k];
				user_task[k]=user_task[k+1];
				user_task[k+1]=temp;
			}
		}
	}
	user_task[y]=-1;
	for(i=0;i<=x;i++)
		cout<<system_task[i]<<" ";
	cout<<endl;
	for(i=0;i<=y;i++)
		cout<<user_task[i]<<" ";
	cout<<endl;


}

void main()
{
	int task[9]={0,30,155,1,80,300,170,40,99};  
    int system_task[9]={0};  
	int user_task[9]={0};  
	scheduler(task,9,system_task,user_task);  
	system("pause");

}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值