#include <bits/stdc++.h> using namespace std; queue<int>M; queue<int>W; int main(void) { int n; cin>>n; char name[101][25]; for(int i=1;i<=n;i++) { char ch; scanf("%s",name[i]); getchar(); scanf("%c",&ch); getchar(); if(ch=='F') { W.push(i); } else if(ch=='M') { M.push(i); } } while(M.empty()!=1&&W.empty()!=1) { int i=M.front(); int j=W.front(); printf("%s & %s\n",name[j],name[i]); M.pop(); W.pop(); } if(M.empty()!=1) { int i=M.front(); printf("%s\n",name[i]); M.pop(); } if(W.empty()!=1) { int i=W.front(); printf("%s\n",name[i]); W.pop(); } }优化这段代码
时间: 2023-12-05 18:04:04 浏览: 59
好的,以下是这段代码的优化建议:
1. 头文件应该只包含所需要的部分,而不是全部使用 "bits/stdc++.h",可以考虑将需要的头文件单独引入。
2. 队列的定义可以写在循环外面,避免每次循环都重新定义,提高效率。
3. 在输入时,可以使用 cin.ignore() 代替 getchar(),可以更简洁地处理输入缓冲区。
4. 在输出时,可以使用 puts() 代替 printf(),可以更快更简便地输出字符串。
5. 在判断队列是否为空时,可以直接使用 !queue.empty() 代替 queue.empty()!=1。
6. 可以将 while 循环的判断条件合并为一个条件,使代码更简洁。
综上所述,优化后的代码如下:
```
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
queue<int> M, W;
char name[101][25];
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> name[i];
cin.ignore();
char ch;
cin >> ch;
if(ch == 'F') {
W.push(i);
} else if(ch == 'M') {
M.push(i);
}
}
while(!M.empty() && !W.empty()) {
int i = M.front();
int j = W.front();
cout << name[j] << " & " << name[i] << endl;
M.pop();
W.pop();
}
if(!M.empty()) {
int i = M.front();
puts(name[i]);
M.pop();
}
if(!W.empty()) {
int i = W.front();
puts(name[i]);
W.pop();
}
return 0;
}
```
阅读全文