• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z zadaniem odnośnie liczb pechowych.

VPS Starter Arubacloud
0 głosów
116 wizyt
pytanie zadane 13 maja 2020 w C i C++ przez Quba Użytkownik (870 p.)

Problem polega na tym, że nie jestem w stanie dostrzec błędu. Program odpala się ale nie uzyskuje pożądanego efektu, a mianowicie.

Zadanie:

Liczbę naturalną nazywamy pechową, jeśli spełnia jednocześnie następujące dwa warunki:
• Jej suma cyfr wynosi 13
• Zawiera co najmniej raz w swoim zapisie dziesiętnym ciąg 13 jako spójny fragment
(czyli zawiera cyfry 1 i 3 stojące obok siebie)
Np. liczby 139, 33133 są pechowe, natomiast 35 oraz 553 nie są liczbami pechowymi.
Napisz program który:
- wyświetli wszystkie pechowe liczby trzycyfrowe,
- wczyta liczbę naturalną N (1<=N<=1010), wyznaczy ile jest liczb pechowych nie
przekraczających N i wypisze ten wynik.

Dokładnie chodzi mi o punkt:

- wczyta liczbę naturalną N (1<=N<=1010), wyznaczy ile jest liczb pechowych nie
przekraczających N i wypisze ten wynik.

Poniżej zamieszczam program, działa on tylko jeśli zakres ustanowię od 1 do 139.

Jeśli koniec zakresu zostanie wylosowany tak jak prosi nas zadanie to nie wyświetla się nic, ponadto program się nie kończy.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
int funkcja_pomocnicza(int i, int &sumka);
bool funkcja_pomocnicza1(int i, int &sumka);

//================================  WYŚWIETLANIE 3-CYFROWYCH LICZB PECHOWYCH  ============================================================

int main()
{
	int x=0, sumka=0, d=0, l=0;
	
	for(int i=139; i<=999; i++)
	{
		if((i/100)+(i%10)+((i/10)%10)==13)
		{		
		if((((i/100)==1)&&((i/10)%10)==3)||((((i/10)%10)==1)&&(i%10)==3))
		cout<<i<<" ";
	    }
	    
	}

//==============================================  LOSOWANIE  ================================================
	
	cout<<endl;
	cout<<"To liczby pechowe trzycyfrowe. \nZaraz program wyswietli liczby pechowe od 1 do liczby wylosowanej.";
	Sleep(1000);
	
	system("cls");
	
	srand(time(NULL));
	x=1+rand()%(10000000000-1+1);
    
	system("cls");
    
	cout<<"Wylosowana liczba: "<<endl;
	cout<<x;
	Sleep(1000);
	system("cls");
    
//=================================  ZBIÓR LICZB PECHOWYCH OD 1 DO LICZBY N  ========================================================

	
for(int i=1; i<=x; i++)
{		
	int sumka=0;
	sumka=0;

	
	if((funkcja_pomocnicza(i,sumka)==13)&&(funkcja_pomocnicza1(i,sumka)==1))
	{
		++l;
	}
}
cout<<l;
return 0;
}

//===========================================  FUNKCJA POMOCNICZA  ==================================================================	

int funkcja_pomocnicza(int i, int &sumka)
{	
    do
	{
	sumka=sumka+i%10;
	i=i/10;
	}
	while(i!=0);
	
	return sumka;
}

bool funkcja_pomocnicza1(int i, int &sumka)
{
if(sumka==13)
{
	do
    {	
	if(i%10==3)
	{
		if(((i/10))%10==1)
		{
			return 1;
		}
	}
	else
	{
	i=i/10;
    }
    }
    while(i!=0);

return 0;  
}
}

 

1 odpowiedź

0 głosów
odpowiedź 13 maja 2020 przez Asertywny Mądrala (5,430 p.)
wybrane 13 maja 2020 przez Quba
 
Najlepsza
1, Napisz funkcję `sumsToThirteen(int n)`, która zwraca `true` jeśli cyfry liczby `n` sumują się do 13, a `false` w przeciwnym wypadku

2. Napisz funkcję `hasThirteen(int n)`, która zwraca `true` jeśli cyfra zawiera w sobie blok `13`, a false w przeciwnym wypadku

3. Napisz funkcję `isUnlucky(int n)`, która za pomocą poprzednich funkcji zwróci true, jeśli liczba jest pechowa oraz false wpp.

4. W funkcji main przechowuj counter. Przeiteruj się po całym zakresie i dla każdej liczby z niego sprawdź, czy jest pechowa (wywołaj isUnlucky). Jeśli tak - zwiększ counter

Jeśli chcesz dogłębniejszej pomocy, poproszę kody dla poszczególnych funkcji z wyjaśnieniem, co nie działa.
komentarz 13 maja 2020 przez Quba Użytkownik (870 p.)

W porządku dziękuję za pomoc smiley

Podobne pytania

0 głosów
1 odpowiedź 121 wizyt
pytanie zadane 5 sierpnia 2020 w Python przez Marak123 Stary wyjadacz (11,190 p.)
0 głosów
1 odpowiedź 232 wizyt
pytanie zadane 23 grudnia 2016 w Ruby przez Newperty Początkujący (280 p.)
0 głosów
2 odpowiedzi 186 wizyt
pytanie zadane 21 sierpnia 2015 w C i C++ przez Anonimowy Nowicjusz (120 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...