写在前面:很久没写过c/c++了,准备机试,练习ing
遇到的问题
- 怎么循环接收数据?
while(cin>>num>>way)
- 怎么处理数据?
int score[num];
string name[num];
for(int i=0;i<num;i++){
cin>>name[i];
cin>>score[i];
}
//降序冒泡
if(way==0){
jiangXv(score,name,num);
}
//升序
if(way==1){
shengXv(score,name,num);
}
- 怎么优化?
看答案的大家很多用了vectors跑得,我试了一下在本地跑不太过,这些的使用都不太了解,之后看明白再继续补充吧~ - 完整代码
#include<iostream>
using namespace std;
void display(int score[],string name[],int num){
for(int i=0;i<num;i++){
cout<<name[i]<<" "<<score[i]<<endl;
}
}
void jiangXv(int score[],string name[],int num){
int m;
string n;
bool change;
for(int i=num-1,change=true;i>=0&&change;i--){
change=false;
for(int j=0;j<i;j++){
if(score[j]<score[j+1]){
m=score[j];
n=name[j];
score[j]=score[j+1];
score[j+1]=m;
name[j]=name[j+1];
name[j+1]=n;
change=true;
}
}
}
display(score,name,num);
}
void shengXv(int score[],string name[],int num){
int m;
string n;
bool change;
for(int i=num-1,change=true;i>=0&&change;i--){
change=false;
for(int j=0;j<i;j++){
if(score[j]>score[j+1]){
m=score[j];
n=name[j];
score[j]=score[j+1];
score[j+1]=m;
name[j]=name[j+1];
name[j+1]=n;
change=true;
}
}
}
display(score,name,num);
}
int main()
{
int num;
int way;
//熟悉c++怎么接收多组数据
while(cin>>num>>way){
int score[num];
string name[num];
for(int i=0;i<num;i++){
cin>>name[i];
cin>>score[i];
}
//降序冒泡
if(way==0){
jiangXv(score,name,num);
}
//升序
if(way==1){
shengXv(score,name,num);
}
}
return 0;
}
两个冒泡排序真的好蠢噢。。
网友评论