#include <bits/stdc++.h>
using namespace std;
string xuat(string s)
{
for(int i=0;i<s.size();i++)
{
for(int j=i;j<s.size();j++)
{
if(s[i]==s[j])
s[i]='1';
s[j]='1';
}
}
return s;
}
int main()
{
string s;
getline(cin,s);
cout<<xuat(s);
return 0;
}
Giúp tìm lỗi sai chuyển các kí tự giống nhau thành 1 (vd abcdabc->111d111)
Do if
bị thiếu ngoặc nhọn nên luôn gán s[j] bằng ‘1’.
2 Likes
mik thêm vào nhưng vẫn ko ra đúng vd abcabcabcd->111111abcd
abc
giống nhau chỗ nào mà thành 111
hả bạn?
tức là trong sâu có kí tự nào giống nhau thì sẽ thành 1 hết
Bạn không nghe đàn anh trên giải thích à? Câu lệnh IF của bạn phải dùng dấu sừng trâu để bọc 2 câu lệnh con lại, còn không thì nó hiểu mỗi câu đầu, còn câu sau nó chẳng quan tâm
if(s[i]==s[j])
s[i]=‘1’;
s[j]=‘1’;
sẽ phải thành:
if(s[i]==s[j]) {
s[i]=‘1’;
s[j]=‘1’;
}
Kiến thức hổng về statement và/ hoặc block.
1 Like
mik sửa theo r nhưng thử kết quả nó ra ntn là đang sai
- Phải là
for(int j=i+1, ...)
mới đúng ý tưởng bubble check của bạn. Nếu j=i thì luôn luôn giống nhau. - Ý tưởng này thực ra không chính xác vì nếu số lượng ký tự giống nhau là số lẻ thì sẽ dư ra một ký tự. Ví dụ
aaa
sẽ thành11a
. - Nếu bạn muốn dùng ý tưởng này thì phải ghi kết quả ra một chuỗi mới.
- Thuật toán nhanh nhất để giải quyết bài này là dùng hash map (dictionary).
5 Likes