复试上机真题历年回顾-2016
成绩排序
输入学生信息,姓名成绩(成绩的数目不一定)
输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程
数从大到小排好序输出。
模拟即可 17年和这个一样
注意一下输入的处理
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define x first
#define y second
const int N=1e5+100;
struct student{
string name;
double avg;
int cnt;
};
bool cmp(student a,student b){
return a.cnt>b.cnt;
}
student stu[N];
vector<vector<double>>v;
bool flag;
int cnt;
signed main(){
string tmp;
while(getline(cin,tmp)){
if(str=="0000") break;
vector<double>t;
int len=tmp.size();
int j=0;
for(int i=0;i<len;i++)
if(tmp[i]==' '){
j=i+1;
stu[++cnt].name=tmp.substr(0,i);
break;
}//名字
int k=j;
for(;j<len;j++)
if(tmp[j]==' ') {
t.push_back(stod(tmp.substr(k,j-k)));
//stod函数将字符串转化为double类型
k=j+1;
}//成绩
t.push_back(stod(tmp.substr(k)));//最后一个成绩
double avg=0;
for(k=0;k<t.size();k++) {
avg+=t[k];
if(t[k]<60) stu[cnt].cnt++;
}
avg/=t.size();
stu[cnt].avg=avg;
}
for(int i=1;i<=cnt;i++){
cout<<stu[i].name<<" "<<stu[i].avg<<endl;
}
sort(stu+1,stu+cnt+1,cmp);
for(int i=1;i<=cnt;i++){
if(stu[i].cnt>1) cout<<stu[i].name<<endl;
}
return 0;
}
输出字符串中包含的数字
输入字符串,输出字符串中包含的数字,比如2. 3ABC0-2. 3输出2. 30-2. 3。.
注意- - 些特殊的情况如+004.500值为+4. 5。
复杂模拟
首先把所有数字筛出来
针对每一个数字
- 先找到+ -号
- 去除前导零
- 找到非零数
- 非前导零
- 找到小数点 判断一下
- 找到尾数中非零数的位置
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 1100;
string v[N];
int cnt;
bool flag;//针对cnt=0的特判 防止cnt=0 与cnt=1出现一些问题
signed main(){
string str;
cin>>str;
//先去掉字符并且把每个数字存入v数组里
for(int i=0;str[i];i++){
if(str[i]=='+'||str[i]=='-'){
if(flag)
v[++cnt]+=str[i]; //碰到符号
else v[cnt]+=str[i],flag=1;
}else if(isdigit(str[i])||str[i]=='.'){
v[cnt]+=str[i];//碰到数字
if(!flag) flag=1;//如果v[0]没有+ or -
}
else{
while(isalpha(str[i])) ++i;
--i;
++cnt;//碰到字符
}
}
for(int i=0;i<=cnt;i++){
if(v[i]=="") continue;
string res="";
flag=0;
bool f=0;
int j;
for(j=0;v[i][j];j++){
char c =v[i][j];
if(c=='+'||c=='-') res=res+c;//符号
else if(c=='0'&&!flag) continue;//前导零去除
else if(isdigit(c)&&c!='0') res=res+c,flag=1;//非0数
else if(c=='0'&&flag){//非前导零
res=res+c;
}else if(c=='.') {//
if(res[0]=='+'||res[0]=='-') {
if(res.size()==1) res+='0';
}
break;
}
}
flag=0;
int tmp =j+1,k;
while(v[i][tmp]){
if(v[i][tmp++]=='0') {;continue;}
else{
flag=1,k=tmp;
}
}
if(flag){
if(res=="") res+='0';
res+=v[i].substr(j,k-j);
}
if(res=="") cout<<'0'<<endl;//全0
else cout<<res<<endl;
}
return 0;
}