修改以下代码#include<iostream> #include<cstring> #include<algorithm> using namespace std; int n, m; string s; int arr[20]; bool vis[30]; char chh[20][20]; int main() { cin >> n >> m; for (int i = 0; i < n; ++i) { cin >> s; for (int j = 0; j < m; ++j) arr[j] = s[j]; sort(arr, arr + m); for (int j = 0; j < m; ++j) chh[i][j] = (char)arr[j]; } for (int j = 1; j < n; ++j) { for (int i = 0; i < n - j; ++i) { if (strcmp(chh[i], chh[i + 1]) > 0) { char tem[20]; strcpy(tem, chh[i]); strcpy(chh[i], chh[i + 1]); strcpy(chh[i + 1], tem); } } } for (int i = 0; i < n; ++i)cout << chh[i] << endl; for (int i = 0; i < n - 1; ++i) { memset(vis, 0, sizeof(vis)); int cnt = 0; for (int j = 0; j < m; ++j) { vis[chh[i][j] - 'a'] = 1; } for (int j = 0; j < m; ++j) { if (!vis[chh[i + 1][j] - 'a']) { cnt++; } } if (cnt != 1) { cout << "No"<<endl;return 0; } } cout << "Yes"; return 0; }
时间: 2023-12-06 18:43:02 浏览: 87
这段代码的功能是:输入一个 $n\times m$ 的字符矩阵,每行的字符可以任意排列,然后对每一行进行排序,最后按照字典序从小到大输出排序后的字符矩阵。接着,判断相邻两行是否只有一个字符不同,如果是则输出 "Yes",否则输出 "No"。
代码本身没有语法错误,但是有一些需要注意的地方:
1. 对于字符数组的排序可以使用 `sort()` 函数,而不需要手写冒泡排序。
2. 对于字符串的排序可以使用 `sort()` 函数,并且可以直接用 `<` 运算符进行比较。
3. 在判断相邻两行是否只有一个字符不同时,可以不用 `memset()` 函数清空数组,因为数组在使用前已经赋值为 false 了。
下面是修改后的代码:#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int n, m;
string s;
char chh[20][20];
bool cmp(string a, string b) {
return a < b;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i) {
cin >> s;
sort(s.begin(), s.end());
for (int j = 0; j < m; ++j) chh[i][j] = s[j];
}
sort(chh, chh + n, cmp);
for (int i = 0; i < n; ++i) cout << chh[i] << endl;
for (int i = 0; i < n - 1; ++i) {
int cnt = 0;
for (int j = 0; j < m; ++j) {
if (chh[i][j] != chh[i + 1][j]) cnt++;
}
if (cnt != 1) {
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
return 0;
}
阅读全文