Afişează mesaje
|
Pagini: [1]
|
1
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Siruri de caractere
|
: Iulie 18, 2013, 16:52:38
|
Salut. Se considera un sir de n cuvinte. Sa se determine cuvantul de lungime maxima care se poate forma prin concatenarea a doua dintre cuvintele cele mai lungi citite de la tastatura. Exemplu : Numarul de cuvinte : 3 (padure, casa, alexandrescu) Lungimea cuvintelor : 6, 4, 12 Cuvantul de lungime maxima care se poate forma prin concatenarea a doua dintre cuvintele cele mai lungi citite de la tastatura : padurealexandrescu.
Cum am incercat sa rezolv problema : citesc numarul de cuvinte dupa care tinand cont de lungimea fiecarui cuvant le ordonez crescator in functie de lungimea cuvantului. O alta conditie care ar trebui introdusa in cazul in care cuvintele sunt egale, cuvintele trebuiesc ordonate alfabetic. Problema este ca nu reusesc sa ordonez cuvintele. Multumesc.
#include <stdio.h> #include <stdlib.h>
int main() { char tab[255][255], temp[255]; int m[255], n, p=0, q=50, i; printf("\n Dati numarul de cuvinte : "); scanf("%d", &n); for(i=0; i<n; i++) { printf("\n Cuvantul %d : ", i+1); scanf("%s", &tab[n]); m = strlen(tab[n]); } }
|
|
|
2
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: problema siruri
|
: Februarie 02, 2013, 17:04:12
|
Doua cuvinte : "abcefgfgfg" si "bababaofgfgfg", compilez si raspunsul (normal, de altfel) NU RIMEAZA. Daca introduc : "abcefgfgfg" si "bababaefgfgfg", compilez, raspunsul este acelasi.
Mai jos este codul :
#include <stdio.h> #include <string.h> #include<stdlib.h>
int vocala(char voc) { switch(voc) { case 'a' : case 'e' : case 'i' : case 'o' : case 'u' : return 1; default : return 0; } }
int strlung(char sir[]) { int i=0; while(sir) i++; return i; }
char *sufix(char sir[]) { int i; for(i=0; i<strlung(sir); i++) if(vocala(sir) == 1) strcpy(sir, sir+1); return sir; }
int main() { char sir_1[100], sir_2[100]; printf("\n Introduceti primul cuvant : "); gets(sir_1); printf("\n Introduceti al doilea cuvant : "); gets(sir_2); if(strcmp(sufix(sir_1), sufix(sir_2)) == 0) printf("\n RIMEAZA\n"); else printf("\n NU RIMEAZA\n"); }
|
|
|
4
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: problema siruri
|
: Februarie 02, 2013, 14:52:37
|
Nu, din pacate nici de aceasta data nu functioneaza. Cele 2 siruri nu rimeaza : abcefgfgfg si abababofgfgfg In enuntul problemei se spune ca "spunem ca doua cuvinte rimeaza daca sufixele incepand de la ultima vocala sunt identice." Adica in cazul celor doua siruri : sufixul sirului "abcefgfgfg" incepand de la ultima vocala este : efgfgfg
sufixul sirului "abababofgfgfg" incepand de la ultima vocala este : ofgfgfg
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / problema siruri
|
: Februarie 02, 2013, 13:28:25
|
Am o problema in c si anume : spunem ca doua cuvinte rimeaza daca sufixele incepand de la ultima vocala sunt identice. Sa se scrie un program care citeste doua cuvinte a si b si determina daca ele rimeaza. Problema poate fi rezolvata usor utilizand functiile dedicate ale limbajului c pentru string-uri. #include <stdio.h> #include <stdlib.h>
int main() { char a[100], b[100], s1[100], s2[100], v[]="aeiou"; int i; printf("\n Introduceti primul cuvant : "); gets(a); printf("\n Introduceti al doilea cuvant : "); gets(b); for(i=0; i<strlen(a); i++) if(strchr(v, a[i])) strcpy(s1, a+i); for(i=0; i<strlen(b); i++) if(strchr(v, b[i])) strcpy(s2, b+i); if(strcmp(s1, s2) == 0) printf("\n RIMEAZA\n"); else printf("\n NU RIMEAZA\n"); }
insa am incercat sa o rezolv si altfel.
#include <stdio.h> #include <stdlib.h>
int vocala(char voc) { switch(voc) { case 'a' : case 'e' : case 'i' : case 'o' : case 'u' : return 1; default : return 0; } }
int strlen(char sir[]) { int i=0; while(sir[i]) i++; return i; }
int sufix(char sir[]) { int i; for(i=0; i<strlen(sir); i++) if(vocala(sir) == 1) strcpy(sir, sir+i); return sir; }
int main() { char sir_1[100], sir_2[100]; int i, m, n, ok; printf("\n Introduceti primul cuvant : "); gets(sir_1); printf("\n Introduceti al doilea cuvant : "); gets(sir_2); if(strcmp(sufix(sir_1), sufix(sir_2)) == 0) printf("\n RIMEAZA\n"); else printf("\n NU RIMEAZA\n"); } Astept sfaturi. multumesc. [editat de moderator] : Te rog sa folosesti tag-ul "[ code] [ / code]" data viitoare cand postezi cod.
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / adunare in binar
|
: Iunie 03, 2012, 10:23:18
|
Salut. Am de rezolvat o problema si anume adunarea a doua numere in binar. Algoritmul pe care l-am facut functioneaza pentru unele numere pentru altele nu.
Sa se realizeze programul de adunare a doua numere in binar.
#include<stdio.h> #include<string.h>
void citire_binar(int a[], int nr) { int i, t; char sir[33]; printf("\n Dati numarul in binar : "); gets(sir); nr=strlen(sir); for(i=0; i<nr; i++) { a[nr-i-1]=sir-'0'; t=a[nr-i-1]; } for(i=nr; i<33; i++) a=0; }
void adunare_binar(int a[], int b[], int c[]) { int i, j, t=0; for(i=0; i<32; i++) { c=(t+=a+b)%2; t/=2; } }
int main() { int i, k, nr_a=0, nr_b=0, a[32], b[32], c[32]; citire_binar(a, nr_a); citire_binar(b, nr_b); adunare_binar(a, b, c); printf("\n"); for(i=31; i>=0; i--) printf(" %d", c); printf("\n"); }
|
|
|
10
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / matrice
|
: Mai 22, 2012, 20:46:41
|
Salut. Am o problema : Fie A o matrice patratica de dimensiune n, cu elemente de tip intreg. In fiecare linie, sa se schimbe intre ele elementele care se afla pe diagonala principala cu cele aflate pe diagonala secundara. Sa se determine maximul elementelor din matrice excluzand pe cele aflate pe diagonale. Prima cerinta am rezolvat-o, insa nu reusesc sa parcurg "doar" elementele din matrice excluzand diagonalele.  #include<stdio.h> #define p 16 #define q 16
int main() { int A[p][q], b=0, d=0, m, n, r, i, j, k; printf("\n Dati numarul de linii (coloane) m = "); scanf("%d", &m); for(i=0; i<m; i++) { for(j=0; j<m; j++) { printf("\n A[%d][%d] = ", i+1, j+1); scanf("%d", &A[i][j]); } } printf("\n Matricea asociata este : \n\n"); for(i=0; i<m; i++) { for(j=0; j<m; j++) { printf("\t %d", A[i][j]); } printf("\n\n"); } for(i=0, j=0; i<m, j<m; i++, j++) { r=A[i][i]; A[i][i] = A[i][m-j-1]; A[i][m-j-1] = r; } printf("\n Matricea rezultat este : \n\n"); for(i=0; i<m; i++) { for(j=0; j<m; j++) { printf("\t %d", A[i][j]); } printf("\n\n"); } for(i=0; i<m; i++) { for(j=i; j<m; j++) { if(i!=j & b < A[i][j]) b = A[i][j]; } } printf("\n\n Maximul elementelor din matrice excluzand pe cele aflate pe diagonale : %d!\n", b); }
Editat de admin: Foloseste tagul "code" cand postezi surse.
|
|
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Palindrom in baza 16
|
: Februarie 13, 2012, 22:46:48
|
Salut. Am nevoie de putin ajutor la urmatoarele doua probleme.
1. Sa se verifice daca un numar n este palindrom in baza 16. Numarul este introdus in baza 10.
Ex : numarul introdus 111281 in interiorul buclei while obtin : 1B2B1 dupa inversarea tabloului : 1B2B1, practic echivalentul in haxazecimal al numarului 2525. dupa aceea ar trebui sa compar elementele celor doua tablouri : tab == tab[k].
am incercat si cealalta varianta a =a*10 + tab b =b*10 + tab[k] dupa care compar a==b tot nu functioneaza.
#include<stdio.h> #define p 30
int main() { int n, n10, i, j, k, tab[p], A; printf("\n Introduceti n10 = "); scanf("%d", &n10); printf("\n"); i=0; n=n10; while(n10) { tab = n10%16; n10/=16; i++; } j=i-1; printf(" Numarul %d in haxazecimal : ", n); for(k=j; k>=0; k--) printf(" %X", tab[k]); printf("\n"); }
2. Sa se afiseze primele n numere care au suma cifrelor mai mica sau egala cu m.
Ex : pentru n=20 si m=4 se vor afisa : 1, 2, 3, 4, 10, 11, 12, 13, 20, 21.
#include<stdio.h>
int main() { int m, n, a, b, c, s, i; printf("\n Dati n = "); scanf("%d", &n); printf("\n Dati m = "); scanf("%d", &m); printf("\n"); i=1; for(; i<=n; ) { a=c; c+=1; s=0; while(a) { b=a%10; s+=b; a/=10; } if(s<=m) { printf(" %d", s); i++; } c++; } printf("\n"); }
|
|
|
12
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / problema
|
: Noiembrie 13, 2011, 17:55:42
|
Nu stiu de ce dar cand compilez primesc urmatoarea eroare : error : expected '=', ',', ';', 'asm' or '--atribute--' before 'esteP2'. In C++ functioneaza dar in C nu. Apropo utilizez Code::Blocks (GNU CC Compiler)
Sa se realizeze un program care sa verifice daca un numar intreg este putere a lui 2, folosind operatiile pe biti.
#include<stdio.h> #include<math.h>
bool esteP2(int nr) { return !((nr-1) & nr); }
int main() { int n; printf("\n Introduceti numarul : "); scanf("%d", &n); if(esteP2(n)) printf("\n Numarul %d este putere a lui 2!", n); else printf("\n Numarul %d nu este putere a lui 2!", n); return 0; }
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Carte
|
: Octombrie 05, 2011, 18:19:05
|
Salut. Am nevoie de cateva sfaturi pentru urmatoarele doua probleme.
1. Marinica a scris o carte cu care se lauda mereu. La un moment dat, un prieten de-al sau il intreaba de cate ori apare cifra x (0<=x<=9) in numerotarea paginilor. Cartea are n pagini, 1<n<=10.000; numerotarea paginilor incepe cu 1.
#include<stdio.h> void main() { int x, n, i, nr_1=0, nr_2=0; printf("\n Dati numarul de pagini n = "); scanf("%d", &n); printf("\n Numarul cautat x = "); scanf("%d", &x); for(i=1; i<=n; i++) if(n%i==x) nr_1++; if(n/i==x) nr_2++; printf("\n Cifra %d apare in numerotarea paginilor de %d ori.\n", x, nr_1+nr_2); }
2. Determinati toate numerele care au proprietatea ca impartind pe 80, 134 sau 152 la unul dintre ele, se obtine acelasi rest, diferit de zero.
#include<stdio.h> void main() { int i; printf("\n Introduceti un numar i = "); scanf("%d", &i); for(i=1; i<=152; i++) {
} }
exemplu : 80:6=13 rest 2; 134:6=22 rest 2; 152:6=25 rest 2.
|
|
|
|