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)
程序如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream.h> 4 #include <conio.h> 5 6 #define N 5 7 8 int cal_score(int score[],int judge_type[],int n) 9 { 10 int iExpert = 0; 11 int iPeople = 0; 12 int iTotalPoints = 0; 13 int i; 14 int iNumber = 0; 15 16 for(i=0;i<N;i++) 17 { 18 if(judge_type[i]==1) 19 { 20 iExpert = iExpert + score[i]; 21 iNumber++; 22 } 23 else 24 { 25 iPeople = iPeople + score[i]; 26 } 27 } 28 if(iNumber==N) 29 { 30 iTotalPoints = (int)(iExpert/N); 31 } 32 else 33 { 34 iExpert = (int)(iExpert/iNumber); 35 iPeople = (int)(iPeople/(N - iNumber)); 36 iTotalPoints = (int)(iExpert*0.6 + iPeople*0.4); 37 } 38 return iTotalPoints; 39 } 40 int main() 41 { 42 int score[N]; 43 int judge_type[N]; 44 int iNumberLast = 0; 45 int i; 46 printf("Please input the %d score:\n",N); 47 48 for(i=0;i<N;i++) 49 { 50 scanf("%d",&score[i]); 51 } 52 printf("Please input the level(1:Expert,2:People)\n"); 53 for(i=0;i<N;i++) 54 { 55 scanf("%d",&judge_type[i]); 56 } 57 iNumberLast = cal_score(score,judge_type,N); 58 printf("The last score is %d\n",iNumberLast); 59 return 0; 60 }
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}
C++程序如下:
1 #include <iostream> 2 using namespace std; 3 4 void main() 5 { 6 int a[50],b[50]; 7 int i,j,n,m=0,t=0; 8 cout<<"请输入数组长度:"<<endl; 9 cin>>n; 10 cout<<"请输入该数组:"<<endl; 11 for(i=0;i<n;i++) 12 cin>>a[i]; 13 for(j=0;j<n-1;j++) 14 for(i=0;i<n-1-j;i++) 15 if(a[i]>a[i+1]) 16 { 17 t=a[i]; 18 a[i]=a[i+1]; 19 a[i+1]=t; 20 } 21 cout<<"升序排列的数组:"<<endl; 22 for(i=0;i<n;i++) 23 cout<<a[i]<<" "; 24 cout<<endl; 25 m=n-1; 26 b[n/2]=a[m--]; 27 if(n%2==0) 28 { 29 for(i=1;i<=n/2;i++) 30 { 31 b[n/2-i]=a[m--]; 32 if(n/2+i==n) 33 continue; 34 b[n/2+i]=a[m--]; 35 } 36 } 37 else 38 { 39 for(i=1;i<=n/2;i++) 40 { 41 b[n/2-i]=a[m--]; 42 b[n/2+i]=a[m--]; 43 } 44 } 45 cout<<"排序后的数组为:"<<endl; 46 for(i=0;i<n;i++) 47 cout<<b[i]<<" "; 48 }
C语言:
1 #include<stdio.h> 2 3 void main() 4 { 5 int a[50],b[50]; 6 int i,j,n,m=0,t=0; 7 printf("请输入数组长度:\n"); 8 scanf("%d",&n); 9 printf("请输入该数组:\n"); 10 for(i=0;i<n;i++) 11 scanf("%d",&a[i]); 12 for(j=0;j<n-1;j++) 13 for(i=0;i<n-1-j;i++) 14 if(a[i]>a[i+1]) 15 { 16 t=a[i]; 17 a[i]=a[i+1]; 18 a[i+1]=t; 19 } 20 printf("升序排列的数组:\n"); 21 for(i=0;i<n;i++) 22 printf("%d ",a[i]); 23 printf("\n"); 24 m=n-1; 25 b[n/2]=a[m--]; 26 if(n%2==0) 27 { 28 for(i=1;i<=n/2;i++) 29 { 30 b[n/2-i]=a[m--]; 31 if(n/2+i==n) 32 continue; 33 b[n/2+i]=a[m--]; 34 } 35 } 36 else 37 { 38 for(i=1;i<=n/2;i++) 39 { 40 b[n/2-i]=a[m--]; 41 b[n/2+i]=a[m--]; 42 } 43 } 44 printf("排序后的数组为:\n"); 45 for(i=0;i<n;i++) 46 printf("%d ",b[i]); 47 }
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[])
1 #include<iostream> 2 using namespace std; 3 4 void scheduler(int task[],int n,int system_task[],int user_task[]) 5 { 6 int i,j; 7 int m=0,k=0; 8 int temp; 9 for(i=0;i<n;i++) 10 { 11 if(task[i]<50) 12 system_task[m++]=i; 13 else if(task[i]<250) 14 user_task[k++]=i; 15 } 16 system_task[m]=-1; 17 user_task[k]=-1; 18 for(j=0;j<m-1;j++) 19 for(i=0;i<m-1-j;i++) 20 if(task[system_task[i]]>task[system_task[i+1]]) 21 { 22 temp=system_task[i]; 23 system_task[i]=system_task[i+1]; 24 system_task[i+1]=temp; 25 } 26 for(j=0;j<k-1;j++) 27 for(i=0;i<k-1-j;i++) 28 if(task[user_task[i]]>task[user_task[i+1]]) 29 { 30 temp=user_task[i]; 31 user_task[i]=user_task[i+1]; 32 user_task[i+1]=temp; 33 } 34 cout<<"system_task[]="; 35 for(i=0;i<=m;i++) 36 { 37 cout<<system_task[i]<<" "; 38 } 39 cout<<endl; 40 cout<<"user_task[] ="; 41 for(i=0;i<=k;i++) 42 { 43 cout<<user_task[i]<<" "; 44 } 45 cout<<endl; 46 } 47 48 void main() 49 { 50 int task[9] = {0,30,155,1,80,300,170,40,99}; 51 int system_task[9] = {0}; 52 int user_task[9] = {0}; 53 scheduler(task,9,system_task,user_task); 54 }