[C++] Liczba potęg liczby 3

zeluso
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 28 wrz 2013, o 16:52
Płeć: Mężczyzna
Lokalizacja: POlska
Podziękował: 2 razy

[C++] Liczba potęg liczby 3

Post autor: zeluso »

Bardzo proszę o pomoc z tym zadaniem siedzę nad nim już 3h i nadal nie działa.
Napisz program, który wypisuje ilość potęg liczby 3 w zadanym przedziale.
Wejście

Pierwszy wiersz standardowego wejścia zawiera dwie liczby całkowite a i b (1 ≤ a,b ≤ 2 000 000 000, a < b).
Wyjście

Pierwszy i jedyny wiersz wyjścia powinien wypisać ilość potęg liczby 3 w przedziale .
Przykład

Dla danych wejściowych:

1 100

poprawną odpowiedzią jest:

5

Narazie mam tyle:

Kod: Zaznacz cały

#include<iostream>
using namespace std;

int main()
{
	int a,b,suma=0,sum=0;
	cin>>b;
	
	for(int j=0; j<=b; j++)
	for(int i=1; i<=b; i++)
	{

		if(i/3==j)	
		suma=suma+1;
		i=(i*3)-1;
	}
	cin>>a;
		for(int z=0; z<=a; z++)
		for(int x=1; x<=a; x++)
	{

		if(x/3==z)	
		sum=sum+1;
		x=(x*3)-1;
	}
Ostatnio zmieniony 29 wrz 2013, o 15:03 przez Afish, łącznie zmieniany 1 raz.
Powód: Używaj tagów code. Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C++] Liczba potęg liczby 3

Post autor: lukequaint »

Twój algorytm jest dość zagadkowy. Mógłbyś opisać, co robisz?

Najprostszym pomysłem jest przejście po całym przedziale i przyrównywanie kolejnych liczb do kolejnych potęg trójki. W takim rozwiązaniu pętla będzie wyglądała następująco:

Kod: Zaznacz cały

int a = 0;
int b = 0;
int liczba_poteg = 0;
int potega = 1;
std::cin >> a >> b;
for (int i = a; i <= b; ++i) {
    // zastanow sie, co tu powinno sie znajdowac
}
Trochę lepszym pomysłem będzie "przechodzenie" po kolejnych potęgach liczby 3 i sprawdzanie, czy znajdują się one w podanym przedziale.

I nie ilość, tylko liczbę.
zeluso
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 28 wrz 2013, o 16:52
Płeć: Mężczyzna
Lokalizacja: POlska
Podziękował: 2 razy

[C++] Liczba potęg liczby 3

Post autor: zeluso »

Ja chciałem obliczyć ilość poteg w liczbie a i w liczbie b, a nastepnie odjąć je od siebie, lecz gdy a jest potęgą 3, to wychodzi inny wynik.
Co do twojego pomysłu to probuje, ale nie potrafie wlasnie tej pętli utworzyć. PO prostu tego nie rozumiem.
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C++] Liczba potęg liczby 3

Post autor: lukequaint »

Ok, ok. Gotowa pętla, według pierwszego pomysłu (podobnego do Twojego), wygląda mniej więcej tak:

Kod: Zaznacz cały

int a = 0;
int b = 0;
int liczba_poteg = 0;
int potega = 1;
std::cin >> a >> b;
/* przechodzimy do potegi wiekszej lub rownej poczatkowi przedzialu */
while (potega < a) {
    potega *= 3;
}
/* przechodzimy po przedziale
 * (sprawdzamy, czy potega nie wyszla poza granice) */
for (int i = a; i <= b && potega <= b; ++i) {
    /* jesli znalezlismy w nim dana potege, zwiekszamy licznik
     * i przechodzimy do nastepnej */
    if (potega == i) {
        ++liczba_poteg;
        potega *= 3;
    }
}
std::cout << liczba_poteg << '\n';
Drugie rozwiązanie:

Kod: Zaznacz cały

int a = 0;
int b = 0;
std::cin >> a >> b;
int potega = 1;
int liczba_poteg = 0;
while (potega <= b) { /* szukamy poteg do konca przedzialu */
    /* jesli dana potega znajduje sie w przedziale, 
     * zwiekszamy licznik */
    if (potega >= a) 
        ++liczba_poteg;
    potega *= 3;
}
std::cout << liczba_poteg << '\n';
zeluso
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 28 wrz 2013, o 16:52
Płeć: Mężczyzna
Lokalizacja: POlska
Podziękował: 2 razy

[C++] Liczba potęg liczby 3

Post autor: zeluso »

Dzięki wiekie, teraz rozumiem co źle zrobiłem + nie znałem koniunkcji.
ODPOWIEDZ