problema c

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
mircea2011
Junior
Junior
Posts: 27
Joined: 11 Aug 2011, 23:12
Judet: Olt

problema c

Post by mircea2011 » 06 Feb 2012, 19:43

Salut.
Am nevoie de putin ajutor. Nu reusesc sa determin numerele naturale care sunt puteri ale lui 3, respectiv 4.
Pe celelalte pana la 9 inca nu le-am incercat.


Pentru un numar natural k dat si un interval [a,b], determinati toate numerele naturale din intervalul [a,b] care sunt puteri ale lui k (2<=k<=9, 2<=a<=b<=9.000.000).

#include<stdio.h>

int main()
{
int i, k, a, b, m, p, count;
printf("\n Dati k (intre 2 si 9) = ");
scanf("%d", &k);
printf("\n Dati a = ");
scanf("%d", &a);
printf("\n Dati b = ");
scanf("%d", &b);
if(b<=a)
{
printf("\n b trebuie sa fie mai mare decat a.\n");
printf("\n Dati b = ");
scanf("%d", &b);
}
printf("\n");
switch(k)
{
case 2:
for(i=a; i<=b; i++)
{
m=i; count=0;
while(m)
{
if(m%k==1)
count++;
m/=k;
}
if(count==1)
printf(" %d", i);
}
break;

case 3:
for(i=a; i<=b; i++)
{
m=i; count=0;
while(m)
{
if(m%k==1 || m%k==2)
count++;
m/=k;
}
if(count==1)
printf(" %d", i);
}
break;

case 4:
for(i=a; i<=b; i++)
{
m=i; count=0;
while(m)
{
if(m%k==1 || m%k==2 || m%k==3)
count++;
m/=k;
}
if(count==1)
printf(" %d", i);
}
break;
}
printf("\n");
}



User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: problema c

Post by bu7ch3r » 06 Feb 2012, 22:19

Cate numere intre 2 si 9 sunt puteri ale lui 3 ?
Cu stima,
Lupu Claudiu

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: problema c

Post by bu7ch3r » 06 Feb 2012, 22:26

Si problema iti spune sa le arati pe toate. De ce nu le generezi in loc sa le cauti ?
Adik alege alta abordare:
gaseste puterea mai mare decat a(inceputul intervalului), calculeaza primul numar apoi de fiecare data mai inmulteste ce aveai inainte cu k si verifica-l sa fie mai mic de cat b(celalalt capat de inteval)....
Cu stima,
Lupu Claudiu

mircea2011
Junior
Junior
Posts: 27
Joined: 11 Aug 2011, 23:12
Judet: Olt

Re: problema c

Post by mircea2011 » 07 Feb 2012, 01:15

Nu, problema este in felul urmator : introducand pe k de la tastatura (k intre 2 si 9), trebuie sa determin care numere sunt puteri ale lui k din intervalul (a, b) introdus si acesta de la tastatura.
Daca o sa rulezi programul si introduci pe k=2, respectiv intervalul a=5, b=98 de exemplu, programul o sa afiseze numerele care sunt puteri ale lui k, in cazul nostru puteri ale lui 2 si anume : 8, 16, 32, 64.

mircea2011
Junior
Junior
Posts: 27
Joined: 11 Aug 2011, 23:12
Judet: Olt

Re: problema c

Post by mircea2011 » 07 Feb 2012, 01:17

Acelasi lucru si pentru k=3, 4, ..., 9
multumesc.

User avatar
cristianamarie
Membru++
Membru++
Posts: 480
Joined: 12 Mar 2009, 18:47
Judet: Iaşi
Location: Iasi

Re: problema c

Post by cristianamarie » 07 Feb 2012, 01:35

Code: Select all

#include <stdio.h>
#include <stdlib.h>

/* npow - ridicare la putere numere intregi: b baza, e exponent, r rezultat */
int npow(int b, int e) {
    /* nu verificam daca rezutatul depaseste INT_MAX */
    int c, r = 1;
    for(c = 0; c < e; c++) {
        r *= b;
    }
    return r;
}

int main() {
    int k, a, b, p, index;
    printf("k=");
    scanf("%d", &k);
    printf("[a, b]=");
    scanf("%d %d", &a, &b);

    /* input corect? */
    if(k < 2 || k > 9) {
        printf("k=%d trebuie sa fie >=2 si <= 9\n");
        exit(1);
    }
    if(a > b) {
        printf("a=%d trebuie sa fie < b=%d\n", a, b);
        exit(1);
    }

    printf("numerele din intervalul [%d, %d] puteri ale lui %d\n", a, b, k);

    /* cea mai mica putere a lui k mai mare sau egala cu a */
    index = 1;
    p = -1;
    for(;;) {
        int p0 = npow(k, index);
        if(p0 >= a) {
            if(p0 > b) {
                p = -1;
            }
            else {
                p = p0;
            }
            break;
        }
        else {
            index++;
        }
    }
    if(p == -1) {
        printf("nu exista\n");
        printf(".stop.\n");
    }
    else {
        /* print p, p * k ... pina cind p > b */
        while(p <= b) {
            printf("%d ", p);
            p *= k;
        }
        printf("\n.stop.\n");
    }

    return 0;
}
Nuclear launch detected

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: problema c

Post by bu7ch3r » 07 Feb 2012, 08:09

:)) Asta e problema de interviu, cel putin eu am auzit-o odata.
@mircea 2011 norocosule, numai copy paste tre sa mai faci :P. Te-am intrebat cate numere sunt puteri ale lui 3 intre 2 si 9 si ai raspuns cu nu :) Incearca sa gandesti logic, solutia data de cristian urmareste algoritmul sugerat de mine...ce rost are sa iei toate numerele de la a la b si sa le validezi cand tu stii ca daca l-ai gasit pe primul, urmatorul va fi numarul gasit inmultit cu k :-???

@cristianamarie 1 e puterea oricarui numar ;) si datele problemei zic ca 2 <= a <=9 <= 9 mil, dar cred ca s-a grabit putin aici:P ;)
Cu stima,
Lupu Claudiu

Post Reply