Dzień dobry mam problem z zadaniem
Liczby półsymetryczne to liczby, które powstały przez sklejenie dwóch liczb symetrycznych np.
443344556655 -> 443344 i 556655, 2211229889 -> 221122 i 9889, 787909 -> 787 i 909 itp.
Podaj, ile jest w pliku liczb, które po zamianie na system dziesiętny są półsymetryczne.
```cpp
bool palindrom(string liczba)
{
bool check;
for(int i=0,x=liczba.size()-1; i<liczba.size()/2; x--,i++)
{
if(liczba!=liczba[x])
{
return false;
}
}
return true;
}
bool polsymetryczna(string liczba)
{
string lewa_liczba,prawa_liczba;
for(int ostatnia_cyfra_lewej_liczby=1; ostatnia_cyfra_lewej_liczby<=liczba.size()-3; ostatnia_cyfra_lewej_liczby++)
{
lewa_liczba="";
prawa_liczba="";
for(int j=0; j<=ostatnia_cyfra_lewej_liczby; j++)
{
lewa_liczba+=liczba[j];
}
for(int j=ostatnia_cyfra_lewej_liczby+1; j<=liczba.size()-1; j++)
{
prawa_liczba+=liczba[j];
}
if(palindrom(lewa_liczba)==true && palindrom(prawa_liczba)==true)
{
return true;
}
}
return false;
}
o to jest mój kod i nie łapie on wszystkich przypadków
liczby półsymetryczne cpp
Otrzymałeś(aś) rozwiązanie do zamieszczonego zadania? - podziękuj autorowi rozwiązania! Kliknij
-
- Dopiero zaczynam
- Posty: 12
- Rejestracja: 15 mar 2023, 11:26
- Podziękowania: 10 razy
- Płeć:
-
- Dopiero zaczynam
- Posty: 22
- Rejestracja: 05 kwie 2023, 09:01
- Otrzymane podziękowania: 1 raz
- Płeć:
Re: liczby półsymetryczne cpp
Kod: Zaznacz cały
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool is_palindrome(string str) {
int n = str.length();
for (int i = 0; i < n/2; i++) {
if (str[i] != str[n-i-1]) {
return false;
}
}
return true;
}
bool is_polsymmetric(string str) {
int n = str.length();
for (int i = 1; i <= n-2; i++) {
string left = str.substr(0, i);
string right = str.substr(i);
if (is_palindrome(left) && is_palindrome(right)) {
return true;
}
}
return false;
}
int main() {
ifstream file("liczby.txt");
string number;
int count = 0;
while (file >> number) {
if (is_polsymmetric(number)) {
count++;
}
}
cout << "Liczba półsymetrycznych liczb w pliku: " << count << endl;
return 0;
}
W funkcji main otwieramy plik "liczby.txt" i dla każdej liczby wywołujemy funkcję is_polsymmetric, zwiększając licznik, jeśli liczba jest półsymetryczna. Na końcu program wypisuje liczbę znalezionych półsymetrycznych liczb.
-
- Dopiero zaczynam
- Posty: 12
- Rejestracja: 15 mar 2023, 11:26
- Podziękowania: 10 razy
- Płeć:
Re: liczby półsymetryczne cpp
Super kod działa idealnie, a czy mógłby Pan powiedzieć co w swoim kodzie mam źle albo opisać troszkę bardziej działanie swojego?
-
- Dopiero zaczynam
- Posty: 22
- Rejestracja: 05 kwie 2023, 09:01
- Otrzymane podziękowania: 1 raz
- Płeć:
Re: liczby półsymetryczne cpp
Twój kod wydaje się poprawny, jednak może nie łapać wszystkich przypadków, ponieważ warunek półsymetryczności, który stosujesz, wymaga, aby obie połówki były palindromami. Oznacza to, że w przypadku, gdy liczba składa się z nieparzystej liczby cyfr, jedna z połówek nie będzie palindromem, a co za tym idzie, liczba nie będzie uznana za półsymetryczną.
Możesz spróbować zmodyfikować funkcję polsymetryczna w ten sposób, aby uwzględniała także liczby o nieparzystej liczbie cyfr, na przykład poprzez dodanie dodatkowego warunku, który będzie sprawdzał, czy połówki są palindromami lub czy ich środkowa cyfra jest taka sama. Oto jedna z możliwych implementacji:
W tej implementacji korzystamy z funkcji substr, aby łatwiej dzielić liczbę na połowy. Dodatkowo sprawdzamy, czy środkowa cyfra (jeśli liczba ma nieparzystą liczbę cyfr) jest taka sama w obu połówkach.
Możesz spróbować zmodyfikować funkcję polsymetryczna w ten sposób, aby uwzględniała także liczby o nieparzystej liczbie cyfr, na przykład poprzez dodanie dodatkowego warunku, który będzie sprawdzał, czy połówki są palindromami lub czy ich środkowa cyfra jest taka sama. Oto jedna z możliwych implementacji:
Kod: Zaznacz cały
bool polsymetryczna(string liczba)
{
int n = liczba.size();
for (int i = 1; i <= n - 2; i++) {
string lewa_liczba = liczba.substr(0, i);
string prawa_liczba = liczba.substr(i, n - i);
if ((palindrom(lewa_liczba) && palindrom(prawa_liczba)) ||
(lewa_liczba == prawa_liczba.substr(1) && liczba[i] == prawa_liczba[0])) {
return true;
}
}
return false;
}
-
- Witam na forum
- Posty: 1
- Rejestracja: 02 wrz 2023, 08:06
Re: liczby półsymetryczne cpp
A semi-symmetric number in C++ is a number that remains the same when its digits are reversed, but not necessarily for all possible digit reversals. Here's a simple C++ code snippet to check if a number is semi-symmetric:
```cpp
#include <iostream>
using namespace std;
bool isSemiSymmetric(int num) {
int original = num;
int reversed = 0;
revanced
while (num > 0) {
int digit = num % 10;
reversed = reversed * 10 + digit;
num /= 10;
}
return original == reversed;
}
int main() {
int number;
cout << "Enter a number: ";
cin >> number;
if (isSemiSymmetric(number)) {
cout << number << " is a semi-symmetric number." << endl;
} else {
cout << number << " is not a semi-symmetric number." << endl;
}
return 0;
}
```
This code takes an integer input, checks if it's semi-symmetric, and then prints the result.
```cpp
#include <iostream>
using namespace std;
bool isSemiSymmetric(int num) {
int original = num;
int reversed = 0;
revanced
while (num > 0) {
int digit = num % 10;
reversed = reversed * 10 + digit;
num /= 10;
}
return original == reversed;
}
int main() {
int number;
cout << "Enter a number: ";
cin >> number;
if (isSemiSymmetric(number)) {
cout << number << " is a semi-symmetric number." << endl;
} else {
cout << number << " is not a semi-symmetric number." << endl;
}
return 0;
}
```
This code takes an integer input, checks if it's semi-symmetric, and then prints the result.