Masz błąd w sortowaniu bąbelkowym. Iterator 'i' nie musi mieć ograniczenia w postaci wyraz.length()-1. Przez to nie sprawdzasz ostatniej litery. Dodatkowo można by sortować anagram tylko raz, a nie tyle razy ile jest testów do sprawdzenia:
#include <iostream>
#include <string>
using namespace std;
void sortowaniebabelkowe(string &wyraz)
{
for (int i = 0; i<wyraz.length() ; i++)
{
for (int j = 0; j<wyraz.length() - 1; j++)
{
if (int(wyraz[j])>int(wyraz[j + 1]))
swap(wyraz[j], wyraz[j + 1]);
}
}
}
int main()
{
string anagram;
int n;
int licznik = 0;
cin >> anagram;
cin >> n;
sortowaniebabelkowe(anagram);
for (int i = 0; i<n; i++)
{
string czyanagram;
cin >> czyanagram;
if (anagram.length() == czyanagram.length())
{
sortowaniebabelkowe(czyanagram);
if (anagram == czyanagram)
licznik++;
}
}
cout << licznik;
}
Mi taki kod zaliczyło na granicy poprawności (0.97s, a limit jest 1s). Mógłbyś zamiast sortowania bąbelkowego użyć funkcji sort:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string anagram;
int n;
int licznik = 0;
cin >> anagram >> n;
sort(anagram.begin(), anagram.end());
for (int i = 0; i<n; i++)
{
string czyanagram;
cin >> czyanagram;
if (anagram.length() == czyanagram.length())
{
sort(czyanagram.begin(), czyanagram.end());
if (anagram == czyanagram)
licznik++;
}
}
cout << licznik;
}
[EDIT]: Można też użyć funkcji is_permutation:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string anagram;
int n;
int licznik = 0;
cin >> anagram >> n;
for (int i = 0; i<n; i++)
{
string czyanagram;
cin >> czyanagram;
if (anagram.length() == czyanagram.length())
if (is_permutation(anagram.begin(), anagram.end(), czyanagram.begin()))
licznik++;
}
cout << licznik;
}