Nje zgjidhje ne C.
Version me optimal O(1) per te gjetur nese no i letrave eshte i sakte apo jo eshte
int no_letrave_i_sakte(int no_letrave){
return ( no_letrave == sqrt(no_letrave)*( sqrt(no_letrave) + 1) );
}
Kodi PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void pyet_no_letrave(int *);
char no_letrave_i_sakte(int , int *);
void nderto_shtepine(int, FILE*);
char* krijo_model(int);
void printo(char *,int, FILE*);
void printo_hapesirat(char*, int, FILE* );
void pyet_no_letrave(int *no_letrave){
fprintf(stdout, "hyni numrin e letrave: ");
fscanf (stdin , "%d", no_letrave);
}
char no_letrave_i_sakte(int no_letrave, int * baza_e_rekursionit){
char i=0, no_gjithsej=0;
for( ; ; no_gjithsej+=i, i+=2)
if(no_gjithsej == no_letrave){
*baza_e_rekursionit = i-2;
return 1;
}
else if(no_gjithsej >= no_letrave){
printf("Gabim. Provo %d.\n", no_gjithsej);
return 0;
}
}
char * krijo_model(int baza_e_rekursionit){
char *modeli=(char*)malloc((baza_e_rekursionit+2)*sizeof(char)), i=0;
for( ; i< baza_e_rekursionit; i++){
if(( i % 2 ) == 0) modeli[i]= '/';
else modeli[i]= '\\';
}
modeli[i]='\0';
return modeli;
}
void nderto_shtepine(int baza_e_rekursionit, FILE * f){
int i= 2; for( ; i<= baza_e_rekursionit; i+=2)
printo(krijo_model(i),baza_e_rekursionit, f);
}
void printo(char *str, int baza_e_rekursionit, FILE* f){
printo_hapesirat(str, baza_e_rekursionit, f);
fprintf(f, "%s\n", str);
free(str);
}
void printo_hapesirat(char *str, int b, FILE* f){
int i=0, s_gj= strlen(str);
for( ; i< (b-s_gj)/2 ; i++) fprintf(f, " ");
}
int main(void){
int no_letrave=0 , baza_e_rekursionit=4;
FILE * dalja = fopen("dalja.txt", "w");
pyet_no_letrave(&no_letrave);
if(no_letrave_i_sakte(no_letrave, &baza_e_rekursionit))
nderto_shtepine(baza_e_rekursionit, dalja);
else main();
fclose(dalja);
return 0;
}
Krijoni Kontakt