Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int suma_monede(int*monede, int nr, int start, int end){
- // [start, end)
- if((start < 0) || (end > nr) || (start >= end)){
- printf("erorare la parametri %d %d",start, end);
- return -1;
- }
- int suma=0;
- for(int i = start;i<end;i++){
- suma += monede[i];
- }
- return suma;
- }
- int compara(int*monede, int nr, int start1, int end1, int start2, int end2){
- if((end1-start1) != (end2-start2)){
- printf("Eroare la parametri %d %d %d %d", start1, end1, start2, end2);
- return 0;
- }
- int suma1,suma2;
- suma1 = suma_monede(monede, nr, start1, end1);
- suma2 = suma_monede(monede, nr, start2, end2);
- return suma1 - suma2;
- }
- int gaseste_moneda(int*monede, int nr, int start, int end){
- // [start, end)
- // recursiva!!!
- printf("Testez intre [%d, %d)\n",start, end);
- if (start == end){
- printf("Eroare, start == end, %d",start);
- return -1;
- }
- if (start == end - 1){
- printf("Moneda gresita este: %d\n", start);
- return 0;
- }
- int nr_crt = end - start;
- if (nr_crt == 2){
- int c = compara(monede, nr, start, start+1, start+1, end);
- if (c < 0){
- printf("Moneda gresita este %d\n", start);
- return 0;
- }
- if (c > 0){
- printf("Moneda gresita este %d\n", start+1);
- return 0;
- }
- if (c == 0){
- printf("Eroare,cele doua monede sunt identice, %d\n",start);
- return -1;
- }
- }//end if nr == 2
- if(nr_crt % 2 == 0){
- int mijloc = (start+end) / 2;
- int c = compara(monede, nr, start, mijloc, mijloc, end);
- if (c == 0){
- printf("Eroare,cele doua monede sunt identice, %d %d\n",start, end);
- return -1;
- }
- if (c < 0){
- return gaseste_moneda(monede, nr, start, mijloc);
- }
- if (c > 0){
- return gaseste_moneda(monede, nr, mijloc, end);
- }
- }
- if(nr_crt % 2 == 1){
- int end2 = end - 1;
- int mijloc = (start + end2) / 2;
- int c = compara(monede, nr, start, mijloc, mijloc, end2);
- if (c == 0){
- printf("Moneda gresita este %d\n", end2);
- return 0;
- }
- if (c < 0){
- return gaseste_moneda(monede, nr, start, mijloc);
- }
- if (c > 0){
- return gaseste_moneda(monede, nr, mijloc, end);
- }
- }
- printf("NU AM LUAT NICI UN CAZ");
- return -100;
- }
- int main(void) {
- int monede[] ={10, 10, 10, 10, 9};
- int nr_monede = sizeof(monede) / sizeof(int);
- int s=gaseste_moneda(monede, nr_monede, 0, nr_monede);
- printf("rezultat apel = %d",s);
- // int s=compara(monede, nr_monede, 0, 2, 2, 4 );
- // printf("suma = %d",s);
- // int s=suma_monede(monede, nr_monede, 1, 2);
- // printf("suma = %d",s);
- // for(int i=0;i<nr_monede;i++){
- // printf("%c ",monede[i]);
- // }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement