Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Informatica / backtracking pe cuvinte : Februarie 27, 2012, 20:14:50
Buna

trebuie sa generez toate posibilitatile de aranjare a cuvintelor unui text dupa niste proprietati:
primul sa fie palindrom
ultimul sa aiba numarul de vocale mai mare decat nr de consoane
celelalte au nr de voc impar si numar de cons par
Cod:
#include <iostream>
#include<string.h>
//primul cuv sa fie palindromic
//cuv sa aiba fiecare numar par de consoane si nr impar de vocale
//ultimul sa aiba nr de vocale mai mare de cat numarul de consoane
using namespace std;
char s[1000], cuvinte[10][100], st[10], n;

void afisare(int k)
{
    for(int i=1;i<=k;i++)
    {
        cout<<cuvinte[st[k]]<<" ";
    }
    cout<<"*************8"<<endl;
}
void voc_cons(char x[100], int &v, int &c)
{
    int l = strlen(x);
    for(int i=0;i<l;i++)
    {
        if(strchr("aeiou", x[i]))
            v++;
        if(!(strchr("aeoiu", x[i])))
            c++;
    }
}
void citire()
{
    cin.getline(s, 1000);
    char *p = strtok(s, " ");
    while(p)
    {
        n++;
        strcpy(cuvinte[n], p);
        int l = strlen(p);
        cuvinte[n][l] = 0;
        p = strtok(NULL, " ");
    }
}


int pali(char x[100])
{
    if(strcmp(x, strrev(x)) == 0)
        return 1;
    return 0;
}

int valid(int k)
{
    for(int i=1;i<k;i++)
        if(st[k] == st[i])
            return 0;
    return 1;
}
int solutie(int k)
{
    if(k <3)
        return 0;
    if(!pali(cuvinte[st[1]]))
        return 0;
    for(int i=2;i<k;i++)
    {
        int v=0, c=0;
        voc_cons(cuvinte[st[i]], v, c);
        if(v%2 != 1 || c%2 != 0)
            return 0;
    }
    int v=0, c=0;
    voc_cons(cuvinte[st[k]], v, c);
    if(v<=c)
        return 0;
    return 1;

}

void back(int k)
{
    for(int i=1;i<=n;i++)
    {
        st[k] = i;
        cout<<cuvinte[st[k]]<<endl;
        if(valid(k))
        {
            if(solutie(k))
                afisare(k);
            back(k+1);
        }
    }
}

int main()
{
    citire();
    back(1);
    return 0;
}

Multumesc anticipat pentru indicatii.
2  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: ajutor va rog sunt abia incepatoare intr-o scoala noua : Februarie 09, 2012, 18:22:08
procedure schimb(var a:integer, var b:intereg;
var aux:integer;
begin
   aux := a;
   a ;= b;
   b := a;
end;


sa mareasca elementele cui cu 5? ale unui sir?

peocedure mareste_5;
{
    for i:=1 to n do
         a = a + 5;
}
3  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Algoritm Lee Clasic Coada : Februarie 08, 2012, 22:44:27
si eu am o problema, plec dintr-un punct si tre' sa ajung in altul. nu prea reusesc. iau o matr viz si pun 1 cand am trecut pe acolo, dar nu stiu cum sa adun in matricea data astfel incat sa fac suma maxima pe cel mai scurt drum pentru a iesi din matrice

Cod:
int Lee()
{
    struct coord{
        int x, y;
    } c[101*101];

    c[0].x = si;
    c[0].y = sj;
    a[si][sj] = 0;//nu stiu ce val sa pun
    viz[si][sj] = 1;//am vizitat
    int p=0,u=0;
    while(p<=u)
    {
        int x1 = c[p].x;
        int y1 = c[p].y;
        for(int k = 0;k<4;k++)
        {
            int xv = x1 + dx[k];
            int yv = y1 + dy[k];
            if(a[xv][yv] > a[x1][y1] && viz[xv][yv] == 0)
                {
                    u++;
                    c[u].x = xv;
                    c[u].y = yv;
                    a[xv][yv] += a[x1][y1];
                }
        }
        cout<<x1<<" "<<y1<<endl;
        if (x1== -1 && y1 == -1)
            return -2;
        p++;
    }
    return -1;
}

ma ajuta orice indicatie.inca nu am clar procedeul de rezolvare, ce sa fac in matricea initiala?

Multumesc anticipat!

Editat de admin: Foloseste tagul "code" cand postezi surse.
4  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 404 Lacuri : Ianuarie 23, 2012, 15:18:05
M-am gandit ca exista si un test in care toate cele n*n patratele au valoarea 1. Astept ajutorul vostru.
5  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 404 Lacuri : Ianuarie 22, 2012, 23:40:30
buna seara,

abia acum am citit problema Lacuri. am facut o functie pentru citire si am luat o variabila cu care verific daca toata matricea este 1. Daca da, afisez 1 nr de patrate si drumul pe diagonala, de la 1-1=== 6,6. Nu am idee cum sa verific daca un 1 este coltul unui patrat.

Orice idee este bine-venita. sper sa nu va supar. Poate cineva a mai pus intrebari pentru aceasta problema.

Multumesc
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines