历年北京理工大学复试上机题题目汇总:
http://blog.csdn.net/u014552756/article/details/78505845
1、输入学生信息,姓名 成绩(成绩的数目不一定)
输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct Stu
{
string name;
int a[105];//各科成绩
int n;//成绩数目
int num;//不及格科目数
};
bool cmp(Stu a,Stu b)
{
return a.num>b.num;
}
int main()
{
Stu stu[105];
int n=0,m=0;
string str,ss[105],s[105];
while(getline(cin,ss[m]))//读取字符串
{
m++;
}
for(int l=0; l<m; l++)
{
str=ss[l];
int num=0;//成绩有几个
int st=-1;
int ed=-1;
int flag=0;//是否找到名字
for(int i=0; i<str.length(); i++)//提取名字
{
if(flag==0)//没开始记录名字
{
if(str[i]!=' ')
{
st=i;
flag=1;
}
}
else if(flag==1)
{
if(str[i]==' ')
{
ed=i;
break;
}
}
}
stu[n].name=str.substr(st,ed-st);//获取名字
flag=0;
str[str.length()]='A';
for(int j=ed+1; j<str.length()+1; j++)//提取每一个科目分数
{
if(flag==0)//还没开始记录数字
{
if(str[j]>='0'&&str[j]<='9')
{
st=j;
flag=1;
}
}
else if(flag==1)
{
if(str[j]==' '||str[j]=='A')
{
ed=j;
int sum=0;
string t=str.substr(st,ed-st);
for(int k=0; k<t.length(); k++)
{
sum=sum*10+(t[k]-'0');
}
stu[n].a[num++]=sum;
flag=0;
st=-1;
ed=-1;
}
}
}
stu[n].n=num;
n++;
}
for(int i=0; i<n; i++)
{
stu[i].num=0;
for(int j=0; j<stu[i].n; j++)
{
if(stu[i].a[j]<60)
stu[i].num++;
}
}
string aa[105];
int tt=0;//不及格科目超过2人数
//查找不及格科目数超过2的学生
for(int i=0; i<n; i++)
{
if(stu[i].num>2)
{
aa[tt++]=stu[i].name;
}
}
if(tt>0)
{
cout<<"不及格科目数超过2的学生为:";
for(int i=0; i<tt; i++)
cout<<aa[i]<<" ";
cout<<endl;
}
else if(tt==0)
cout<<"没有不及格的学生"<<endl;
//按照不及格科目数从大到小排序后
sort(stu,stu+n,cmp);
for(int i=0; i<n; i++)
cout<<stu[i].name<<"不及格科目数"<<stu[i].num<<endl;
return 0;
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISN3gzMyETNyEDOwMDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
2、输入字符串,输出字符串中包含的数字,比如 2.3ABC0-2.3 输出 2.3 0 -2.3。
注意一些特殊的情况如+004.500值为+4.5。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str,s[105];
getline(cin,str);
int i,j,k,n=0,flag=0,st=-1,dot=0;
str[str.length()]='A';
for(i=0; i<str.length()+1; i++)
{
if(flag==0)//没开始存数
{
if(str[i]=='.')
{
flag=1;
dot=1;
st=i;
}
else if(str[i]=='+'||str[i]=='-'||(str[i]>='0'&&str[i]<='9'))
{
flag=1;
st=i;
}
}
else if(flag==1)
{
if(str[i]=='.')
{
if(dot==1)
{
s[n++]=str.substr(st,i-st);
flag=0;
dot=0;
st=-1;
i--;
}
else
dot=1;
}
else if(str[i]=='+'||str[i]=='-')
{
s[n++]=str.substr(st,i-st);
flag=0;
st=-1;
dot=0;
i--;
}
else if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')||str[i]==' ')
{
s[n++]=str.substr(st,i-st);
flag=0;
st=-1;
dot=0;
}
}
}
for(i=0; i<n; i++)//处理提取出来的字符串
{
st=0;
str=s[i];
if(str[0]=='+'||str[0]=='-')//若第一个字符为符号则从第二个开始分析
{
cout<<str[0];
st=1;
}
int t;
for(j=st; j<str.length(); j++)//找到第一个不为0的数字或小数点
{
if((str[j]>='1'&&str[j]<='9')||str[j]=='.')
{
t=j;
break;
}
}
if(str[t]=='.')//第一个为小数点
{
cout<<"0.";
for(j=str.length()-1; j>=0; j--)
if(str[j]>='1'&&str[j]<='9')
break;
for(k=t+1; k<=j; k++)
cout<<str[k];
cout<<endl;
}
else//第一个为数字1--9
{
for(j=str.length()-1; j>=0; j--)
if(str[j]>='1'&&str[j]<='9')
break;
for(k=t; k<=j; k++)
cout<<str[k];
cout<<endl;
}
}
cout<<endl;
return 0;
}