#include<iostream> using namespace std; struct add { int a; char c[10]; int t1=0; int t2=0; }s[60]; int main() { int n; cin>>n; for(int i=0;i<n;i++) { cin>>s[i].a>>s[i].c; if(s[i].a==0) s[i].t1++; else s[i].t2++; } int p=0,v=0; for(int i=0;i<n;i++) { if(s[i].a==0&&p<=n/4) { p++; for(int j=0;j<n;j++) { if(s[j].a==1) { if(s[j].t2+s[i].t1==n/2) printf("%s %s",s[i].c,s[j].c); } } } if(s[i].a==1&&v<=n/4) { v++; for(int j=0;j<n;j++) { if(s[j].a==0) { if(s[j].t2+s[i].t1==n/2) printf("%s %s",s[i].c,s[j].c); } } } } return 0; }改错
时间: 2023-11-22 11:55:36 浏览: 86
代码中存在一些问题:
1. 结构体 `add` 中的 `t1` 和 `t2` 变量应该在输入完毕后统计,而不是初始化为 0。
2. 在输出配对时,应该换行,否则所有的配对结果都会在同一行输出。
3. 输出格式应该为 `%s %s\n`,而不是 `%s %s`,否则所有的配对结果都不会换行。
根据以上问题,修改后的代码如下:
```c++
#include <iostream>
using namespace std;
struct add {
int a;
char c[10];
int t1, t2;
} s[60];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> s[i].a >> s[i].c;
s[i].t1 = s[i].t2 = 0;
if (s[i].a == 0)
s[i].t1++;
else
s[i].t2++;
}
for (int i = 0; i < n; i++) {
if (s[i].a == 0 && s[i].t1 <= n / 4) {
s[i].t1++;
for (int j = 0; j < n; j++) {
if (s[j].a == 1 && s[j].t2 <= n / 4) {
if (s[j].t2 + s[i].t1 == n / 2) {
printf("%s %s\n", s[i].c, s[j].c);
s[j].t2++;
break;
}
}
}
}
if (s[i].a == 1 && s[i].t2 <= n / 4) {
s[i].t2++;
for (int j = 0; j < n; j++) {
if (s[j].a == 0 && s[j].t1 <= n / 4) {
if (s[j].t2 + s[i].t1 == n / 2) {
printf("%s %s\n", s[i].c, s[j].c);
s[j].t1++;
break;
}
}
}
}
}
return 0;
}
```
阅读全文