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;
}
}