C/C++程序题(11-15)
2016-03-27 16:13
471 查看
11.
选秀节目打分
选秀节目打分,分为专家评委和大众评委,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)
12.
数字排序
给定一个数组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}
13.
操作系统任务调度问题。
操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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[])
注:关键点:数组大小的排序,根据间接性的大小判断标准来对数组元素进行相应排序。
14.
字符串替换
描述:编写一个字符串替换函数,如strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。
举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:
ABCDEFGHIJKLMNOPQgggUVWXYZ (如果用c语言呢?)
string类的删除函数 erase()
iterator erase(iterator first, iterator last);//删除[first,last)之间的所有字符,返回删除后迭代器的位置
iterator erase(iterator it);//删除it指向的字符,返回删除后迭代器的位置
string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串
插入函数insert()函数的原型:
string &insert(int p0, const char *s);
string
&insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//在p0位置插入字符串s中pos开始的前n个字符
也可用replace()=erase()+insert()
15.
数组排序
对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。
#include<iostream>
using namespace std;
void fun(int num[],int n,int out[])
{
int k=0,l=0;
int* even=new int
;
int* odd=new int
;
for(int i=0;i<n;i++)//奇偶分组
{
if(num[i]%2==0)
even[k++]=num[i];
else
odd[l++]=num[i];
}
for(int i=0;i<k-1;i++)//偶排序
{
for(int j=i+1;j<k;j++)
{
if(even[i]<even[j])
{
int temp=even[i];
even[i]=even[j];
even[j]=temp;
}
}
}
for(int i=0;i<l-1;i++)//奇排序
{
for(int j=i+1;j<l;j++)
{
if(odd[i]>odd[j])
{
int temp=odd[i];
odd[i]=odd[j];
odd[j]=temp;
}
}
}
int k1=0,l1=0,p=0;
while(k!=k1||l!=l1)//穿插
{
if(l1!=l)
out[p++]=odd[l1++];
if(k1!=k)
out[p++]=even[k1++];
}
delete []even;
delete []odd;
}
void main()
{
int n;
cin>>n;
int* num=new int
;
int* out=new int
;
for(int i=0;i<n;i++)
cin>>num[i];
fun(num,n,out);
for(int i=0;i<n;i++)
cout<<out[i]<<' ';
}
选秀节目打分
选秀节目打分,分为专家评委和大众评委,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 cal_score(int *score,int *judge_type,int n) { int score1=0,score2=0,num=0,result; for(int i=0;i<n;i++) { if(judge_type[i]==1) score1+=score[i]; else { score2+=score[i]; num++; } } if(num==0) result=score1/n; else result=score1/(n-num)*0.6+score2/num*0.4; return result; } void main() { int n; cin>>n; int *score=new int ; int *judge_type=new int ; for(int i=0;i<n;i++) cin>>score[i]; for(int i=0;i<n;i++) cin>>judge_type[i]; int result=cal_score(score,judge_type,n); cout<<result<<endl; }
12.
数字排序
给定一个数组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}
#include <iostream> using namespace std; void reorde(int *input,int *output,int n) { int temp; for(int i=0;i<n;i++)//将input[]从大到小排序 { for(int j=1;i+j<n;j++) { if(input[i]<input[i+j]) { temp=input[i]; input[i]=input[i+j]; input[i+j]=temp; } } } int k=n/2; int m; if(k!=0) m=k; else m=k+1; if(k!=0) output[k]=input[0]; for(int i=1,a=1;i<=m;i++)//这个循环很关键! { output[k-i]=input[a++]; output[k+i]=input[a++]; } } void main() { int n; cin>>n; int *input=new int ; int *output=new int ; for(int i=0;i<n;i++) cin>>input[i]; reorde(input,output,n); for(int i=0;i<n;i++) cout<<output[i]<<' '; delete []input; delete []output; }注:巧点在于一左一右为一循环。
#include <iostream> using namespace std; void fun(int n,int input[],int output[]) { for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { if(input[i]<input[j]) { int temp=input[i]; input[i]=input[j]; input[j]=temp; } } } if(n%2==0) { int k=0; for(int i=0;i<n/2;i++) { output[n/2-1-i]=input[k++]; output[n/2+i]=input[k++]; } } if(n%2==1) { int k=1; output[n/2]=input[0]; for(int i=1;i<=n/2;i++) { output[n/2-i]=input[k++]; output[n/2+i]=input[k++]; } } } void main() { int n; cin>>n; int *input=new int ; int *output=new int ; for(int i=0;i<n;i++) cin>>input[i]; fun(n,input,output); for(int i=0;i<n;i++) cout<<output[i]<<endl; }
13.
操作系统任务调度问题。
操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 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 <iostream> using namespace std; void scheduler(int *task,int n,int *system_task,int *user_task) { int l=0,k=0,m; for(int i=0;i<n;i++) { if(task[i]<50) { system_task[l]=i; l++; } if(task[i]<=255&&task[i]>=50) { user_task[k]=i; k++; } } for(int i=0;i<l;i++) { for(int j=1;i+j<l;j++) if(task[system_task[i]]>task[system_task[i+j]]) { m=system_task[i]; system_task[i]=system_task[i+j]; system_task[i+j]=m; } } for(int i=0;i<k;i++) { for(int j=1;i+j<k;j++) if(task[user_task[i]]>task[user_task[i+j]])// { //根据数组值所对应的相应指来来作为大小判断标准 m=user_task[i]; user_task[i]=user_task[i+j]; user_task[i+j]=m; } } system_task[l]=-1; user_task[k]=-1; } void main() { int n; cin>>n; int *task=new int ; for(int i=0;i<n;i++) cin>>task[i]; int *system_task=new int[n+1]; int *user_task=new int[n+1]; scheduler(task,n,system_task,user_task); int i=0,j=0; while(1) { cout<<system_task[i]<<' '; if(system_task[i]==-1) break; i++; } cout<<endl; while(1) { cout<<user_task[j]<<' '; if(user_task[j]==-1) break; j++; } delete []task; delete []system_task; delete []user_task; }
注:关键点:数组大小的排序,根据间接性的大小判断标准来对数组元素进行相应排序。
14.
字符串替换
描述:编写一个字符串替换函数,如strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。
举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:
ABCDEFGHIJKLMNOPQgggUVWXYZ (如果用c语言呢?)
#include <iostream> #include <string> using namespace std; void main() { string strSrc,strFind,strReplace; cin>>strSrc>>strFind>>strReplace; int s=strFind.size(); int n=strSrc.find(strFind); do{ strSrc.erase(n,s); strSrc.insert(n,strReplace); n=strSrc.find(strFind); }while(n>0); cout<<strSrc<<endl; }注:find()(4题)函数原型size_t find (const string& str, size_t pos = 0);
string类的删除函数 erase()
iterator erase(iterator first, iterator last);//删除[first,last)之间的所有字符,返回删除后迭代器的位置
iterator erase(iterator it);//删除it指向的字符,返回删除后迭代器的位置
string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串
插入函数insert()函数的原型:
string &insert(int p0, const char *s);
string
&insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//在p0位置插入字符串s中pos开始的前n个字符
也可用replace()=erase()+insert()
//仅限于替换与被替换的字符串的长度一致的时候 #include<iostream> #include<cstring> using namespace std; void replace(char *strSrc,char* strFind,char* strReplace) { int m=strlen(strSrc); int n=strlen(strFind); char temp[20]; for(int i=0;i<m;i++) { if(strSrc[i]==strFind[0]) { strncpy(temp,&strSrc[i],n); if(strcmp(temp,strFind))//相等strcmp()返回0 { for(int j=0;j<n;j++) strSrc[i++]=strReplace[j]; } } } } void main() { char strSrc[100],strFind[100],strReplace[100]; cin.getline(strSrc,100); cin.getline(strFind,100); cin.getline(strReplace,100); replace(strSrc,strFind,strReplace); cout<<strSrc<<endl; }
15.
数组排序
对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。
#include <iostream> using namespace std; void main() { int n,p=0,q=0,temp; cin>>n; int *number=new int ; int *out=new int ; int *even=new int ; int *odd=new int ; for(int i=0;i<n;i++) cin>>number[i]; for(int i=0;i<n;i++) { if(number[i]%2==0) { even[p]=number[i]; p++; } else { odd[q]=number[i]; q++; } } for(int i=0;i<p;i++) { for(int j=1;i+j<p;j++) { if(even[i]<even[i+j]) { temp=even[i]; even[i]=even[i+j]; even[i+j]=temp; } } } for(int i=0;i<q;i++) { for(int j=1;i+j<q;j++) { if(odd[i]>odd[i+j]) { temp=odd[i]; odd[i]=odd[i+j]; odd[i+j]=temp; } } } int k=0; for(int j=0;(j<p)&&(j<q);j++) { out[k++]=odd[j]; out[k++]=even[j]; } if(p>q) { for(int i=0;i<p-q;i++) { out[k+i]=even[q+i]; } } if(p<q) { for(int i=0;i<q-p;i++) { out[k+i]=odd[p+i]; } } for(int i=0;i<n;i++) cout<<out[i]<<' '; delete []number; delete []out; delete []even; delete []odd; }注:分别存储偶数数字和奇数数字,并分别排序,再按说明赋值到out数组。
#include<iostream>
using namespace std;
void fun(int num[],int n,int out[])
{
int k=0,l=0;
int* even=new int
;
int* odd=new int
;
for(int i=0;i<n;i++)//奇偶分组
{
if(num[i]%2==0)
even[k++]=num[i];
else
odd[l++]=num[i];
}
for(int i=0;i<k-1;i++)//偶排序
{
for(int j=i+1;j<k;j++)
{
if(even[i]<even[j])
{
int temp=even[i];
even[i]=even[j];
even[j]=temp;
}
}
}
for(int i=0;i<l-1;i++)//奇排序
{
for(int j=i+1;j<l;j++)
{
if(odd[i]>odd[j])
{
int temp=odd[i];
odd[i]=odd[j];
odd[j]=temp;
}
}
}
int k1=0,l1=0,p=0;
while(k!=k1||l!=l1)//穿插
{
if(l1!=l)
out[p++]=odd[l1++];
if(k1!=k)
out[p++]=even[k1++];
}
delete []even;
delete []odd;
}
void main()
{
int n;
cin>>n;
int* num=new int
;
int* out=new int
;
for(int i=0;i<n;i++)
cin>>num[i];
fun(num,n,out);
for(int i=0;i<n;i++)
cout<<out[i]<<' ';
}
相关文章推荐
- c++第二次实验-1
- CodeForces 635A Orchestra
- C语言指针的指针作用(返回值)之二
- C++中map容器的使用
- [面试] C/C++ —— MFC(二)
- C++中vector的remove用法
- C++学习笔记——第12章 继承
- C++模板堆排序
- 标准C++中的string类的用法总结
- c++第二次实验-1
- 使用new和vector实现一维和二维数组
- Cousera北大程序设计课程c++ week2作业答案解析
- c++作业2
- Java中的引用与c++的指针区别
- C++指针,引用,常引用作为函数的参数
- C++指针数组
- 特别注意
- 利用桥接模式实现手机品牌和手机软件之间的解耦 C++
- 用C语言写的一个小的银行管理程序
- C++中“头文件”的定义和使用