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[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数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");
}