寫在前面:很久沒寫過c/c++了,準(zhǔn)備機(jī)試,練習(xí)ing
遇到的問題
- 怎么循環(huán)接收數(shù)據(jù)?
while(cin>>num>>way) - 怎么處理數(shù)據(jù)?
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);
}
- 怎么優(yōu)化?
看答案的大家很多用了vectors跑得,我試了一下在本地跑不太過,這些的使用都不太了解,之后看明白再繼續(xù)補(bǔ)充吧~ - 完整代碼
#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++怎么接收多組數(shù)據(jù)
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;
}
兩個冒泡排序真的好蠢噢。。