Sheller_liu's blog

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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)

程序如下:

 

View Code
 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++程序如下:

View Code
 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语言:

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

View Code
 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 }
posted on 2012-09-24 18:25  sheller_liu  阅读(704)  评论(0编辑  收藏  举报