Pagini: 1 2 [3] 4   În jos
  Imprimă  
Ajutor Subiect: 002 Algoritmul lui Euclid extins  (Citit de 41144 ori)
0 Utilizatori şi 2 Vizitatori pe acest subiect.
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #50 : Februarie 03, 2010, 15:14:34 »

Stii cum se spune: un exemplu te poate ajuta, dar in acelasi timp "deruta". Sunt probleme in care exemplul este un fel de "caz particular" , iar tu tratezi fara sa vrei acel caz, iar de restul uiti, si asa s-a dus problema de rapa  Angry
Memorat
crissty82
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #51 : Februarie 13, 2010, 17:21:25 »

Salut

Ma chinui de o juma de ora....
Asta e codul meu pt care primesc 0 puncte
Ce nu e bine?

Cod:
#include<iostream.h>
#include <fstream.h>
int eucl(int a, int b)
{
    if(a==b) return a;
    if(a>b)
           return eucl(a-b,b);
    else
        return eucl(a,b-a);
}
int main()
{
    int a,b,minim;
    ifstream fisin("euclid.in");
    fisin>>a;fisin>>b;
    fisin.close();
    ofstream fisout("euclid.out");
    fisout<<eucl(a,b);
 
   
   fisout.close();
}

Foloseste [ code ] ... [/ code ] cand postezi cod.
« Ultima modificare: Februarie 13, 2010, 18:16:51 de către Paul-Dan Baltescu » Memorat
best4him
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #52 : Martie 17, 2010, 15:31:15 »

Cod:
// algoritmul lui euclid.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
using namespace std;
#include<fstream>
ifstream f("euclid2.in.txt");
ofstream g("euclid2.out.txt");
int cmmdc(int a, int b)
{  int r;
    r = a % b;
      while(r != 0)
       {
         a = b;
         b = r;
         r = a % b;
      }
  return b;
}

int _tmain(int argc, _TCHAR* argv[])
{ int n,i,a,b;
f>>n;
cout<<n;
for(i=0;i<n;i++)
{
f>>a;f>>b;
cout<<a<<" ,"<<b;
g<<cmmdc(a,b);
g<<endl;
}

f.close();
g.close();
return 0;
}


Folosesc VIsual c++ 2008 ....ce este gresit de nu imi da 0 puncte?, Asta e prima data cand trimit o solutie la vreo problema si nu prea stiu cum merg lucrurile!
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #53 : Martie 17, 2010, 15:58:44 »

stdafx.h trebuie eliminat, aceasta biblioteca are sens doar pt IDE-ul folosit de tine si app taie iostream ( inutil ) si pune fstream in loc Wink ( desi l-ai pus sub namespace std; ) si este main nu _tmain Smile
ps: ai gresit fisierele ( fara .txt )
pss: problema apartie de algoritmul lui euclid, nu de algoritmul lui euclid extins Wink
Memorat
best4him
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #54 : Martie 17, 2010, 18:24:21 »

mersi, pai eu am dat sa dau comentariu aici http://infoarena.ro/problema/euclid2 si vad ca l-a afisat aici , stiu ca nu trebuie <iostream> dar din obisnuinta... Aha Thx!
Ps. De unde sa invat algoritmii de baza,? adica ce e prin manuale mi se pare putin...este vreo carte mai buna despre algoritmi?(nu vreau sa nu fie nici prea abstracta:D pentru ca nu stiu cat de mult am sa inteleg.)

Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #55 : Martie 17, 2010, 18:28:52 »

Incearca setul de 3 volume : Programare  in limbajul C/C++ pentru liceu de Emanuela Cerchez si Marinel Serban. Primul volum e pentru incepatori( clasa a 9-10 ), al doilea volum e pentru clasa 10-11, iar ultimul pentru 11-12 Smile
Memorat
best4him
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #56 : Martie 17, 2010, 18:33:26 »


Mersi, vad ca nu imi ia decat 40 de puncte...si e facut prin impartire...de ce?Very Happy
am facut si recursiv...dar tot nu trece de 40... Brick wall
Cod:
int cmmdc(int a, int b)
{  if (b==0)
return a;
else
return cmmdc(b,a%b);

}
« Ultima modificare: Martie 17, 2010, 18:45:48 de către Cristinescu Andrei » Memorat
dornescuvlad
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #57 : Aprilie 02, 2010, 17:30:55 »

problema ar putea fi ca tu afisezi 1 daca sunt prime intre ele , in loc sa afisezi 0 cum scrie in enunt

L.E : vad ca s-a rezolvat
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #58 : Aprilie 02, 2010, 17:33:06 »

problema ar putea fi ca tu afisezi 1 daca sunt prime intre ele , in loc sa afisezi 0 cum scrie in enunt
Vezi tu undeva scris asa ceva ? NU mai posta aiurea, ca incurci oamenii .
Memorat
cipri20
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #59 : Aprilie 13, 2010, 19:45:03 »

Cod:

Cod:
include<stdio.h>
int main()
{
 freopen("euclid2.in","r",stdin);
 freopen("euclid2.out","w",stdout);
  int aux,a,b,i,x;
  for(i=0;i<x;i++)
    {
      scanf("%d",&a);
      scanf("%d",&b);
    }

    while(b!=0)
     {
       aux = b;
       b = a%b;
       a = aux;


     }
  printf("%d",a);
  printf("\n");

 return 0;
}

Modificat de Moderator : Foloseste tag-ul [ code ] ... [/ code ] pentru surse!


imi spune si mie cineva de ce imi afiseaza 2?
« Ultima modificare: Aprilie 13, 2010, 22:51:06 de către Mircea Dima » Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #60 : Aprilie 13, 2010, 19:48:33 »

aux=a%b;
Nu inteleg ce are de a face cu Algoritmul lui Euclid Extins
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #61 : Aprilie 13, 2010, 19:48:47 »

Cod:
for(i=0;i<x;i++)
    {
      scanf("%d",&a);
      scanf("%d",&b);
    }
Asta ce este ? X este un numar random, pentru ca este in interiorul int-ului, si de accea b si a vor fi iarasi numere random, si probabil daca rulezi de mai multe ori o sa ai rezultat diferit.
Incearca asa:
Cod:
include<stdio.h>
int main()
{
 freopen("euclid2.in","r",stdin);
 freopen("euclid2.out","w",stdout);
  int aux,a,b,i;

    scanf("%d",&a);
    scanf("%d",&b);
   
    while(b!=0)
     {
       aux = b;
       b = a%b;
       a = aux;


     }
  printf("%d",a);
  printf("\n");

 return 0;
}

EDIT: Alexandru, daca te uiti atent ALE si ALE Extins au acelasi post daca dai la comentarii, am postat la cel simplu pe forum dar nu mi-a raspuns nimeni.
Memorat
cipri20
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #62 : Aprilie 13, 2010, 19:54:42 »

Imi da la fel Brick wall
Memorat
popoiu.george
Vorbaret
****

Karma: 19
Deconectat Deconectat

Mesaje: 162



Vezi Profilul
« Răspunde #63 : Aprilie 13, 2010, 21:22:12 »

@cipri20 M-am uitat pe sursa ta si calcularea cmmdc e corecta, doar ca tu nu tii cont ca in fisierul de intrare vor fi T teste. Si cred ca e nevoie de long long pentru 100pt.

Sper ca ti-a fost de folos.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #64 : Aprilie 13, 2010, 21:26:18 »

@popoiu.george E suficient int , incape
@cipri20 Trebuie sa citesti prima data pe T si apoi sa faci un for in care de fiecare data calculezi cmmdc
Cod:
scanf("%d",&T);
for (i = 1; i <= T; i++)
       scanf("%d %d", &a,&b);
       ......................
Memorat
cipri20
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #65 : Aprilie 14, 2010, 17:06:50 »

 
Cod:
  #include<stdio.h>
int main()
{
 int i,a,b,r,T;
 freopen("euclid2.in","r",stdin);
 freopen("euclid2.out","w",stdout);
  scanf("%d",&T);
  for(i=1;i<=T;i++)
   scanf("%d %d",&a,&b);
    do
      {
    r=a%b;
    a=b;
    b=r;
      }while(r!=0);

    printf("%d\n",a);
   return 0;
}
imi afiseaza 1 de fiecare data  Brick wall

si daca faca
Cod:
  while(b>0)
    {
      ....
    }
la fel afiseaza
Modificat de Moderator: Nu mai posta de 2 ori consecutiv. Foloseste butonul "Modifica".
« Ultima modificare: Aprilie 14, 2010, 17:33:26 de către Mircea Dima » Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #66 : Aprilie 14, 2010, 17:37:12 »

Cod:
  #include<stdio.h>
int main()
{
 int i,a,b,r,T;
 freopen("euclid2.in","r",stdin);
 freopen("euclid2.out","w",stdout);
  scanf("%d",&T);
  for(i=1;i<=T;i++)
   scanf("%d %d",&a,&b);
    do
      {
    r=a%b;
    a=b;
    b=r;
      }while(r!=0);

    printf("%d\n",a);
   return 0;
}
imi afiseaza 1 de fiecare data  Brick wall

si daca faca
Cod:
  while(b>0)
    {
      ....
    }
la fel afiseaza
Modificat de Moderator: Nu mai posta de 2 ori consecutiv. Foloseste butonul "Modifica".


Tu doar citesti in for... nu si calculezi cmmdc-ul.
Ar trebui sa faci asa (observa acoladele):

Cod:

for(i=1;i<=T;i++)
{
   scanf("%d %d",&a,&b);
    do
      {
    r=a%b;
    a=b;
    b=r;
      }while(r!=0);
     printf ("%d\n", a);
}
Memorat
cipri20
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #67 : Aprilie 14, 2010, 20:55:43 »

Mersi mult mi-a iesit Winner 1st place
Memorat
paul_gabryel
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #68 : August 26, 2010, 14:09:58 »

dece pe calculatorul meu pe exemplul lor am rezultatele
98 -147
13 -13
0 0

si cand am trimis sursa am luat 100 de puncte Huh?
nu inteleg imi poate explica cineva
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #69 : August 26, 2010, 14:27:34 »

Citat
In cazul in care exista mai multe solutii pentru o ecuatie, se poate afisa oricare solutie pentru care necunoscutele nu depasesc in valoare absoluta 2 000 000 000. Pentru toate ecuatiile pentru care exista solutie, va exista si o solutie cu ambele necunoscute aflate in acest interval.
Deci inseamna ca rezultatul dat de tine e bun ....
P.S. - Atat imi da si mie Tongue
Memorat
paul_gabryel
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #70 : August 26, 2010, 14:43:02 »

ioi am am sarit peste partea aceea ms Smile)
Memorat
AndrewTheGreat
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #71 : Septembrie 22, 2010, 18:13:31 »

Poate cineva, va rog, sa imi spuna de ce cand imi declar variabilele long long nu iau 100 si cand le declar int iau 100?

Sursa 100: http://infoarena.ro/job_detail/486775
Sursa 0: http://infoarena.ro/job_detail/486766

Multumesc anticipat!
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« Răspunde #72 : Septembrie 22, 2010, 18:44:53 »

Incearca sa folosesti %lld in loc de %I64d
Memorat
romircea2010
Strain
*

Karma: 18
Deconectat Deconectat

Mesaje: 35



Vezi Profilul
« Răspunde #73 : Martie 21, 2012, 00:58:42 »

Am inteles partea cu daca c%d != 0 atunci nu exista solutii dar ma incurc la celalalt caz: de ce trebuie sa inmultim x si y cu (c/d) ca sa obtinem solutie?
Memorat
alexandru822
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #74 : Martie 30, 2015, 15:57:05 »

O intrebare: care e diferenta in a folosi &X sau X in functia din exemplu?
Memorat
Pagini: 1 2 [3] 4   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines