iagoac / mc202

Disciplina MC202 - Estruturas de Dados
GNU General Public License v3.0
17 stars 13 forks source link

Problema saída lab3 #58

Closed leticia-rosa closed 4 years ago

leticia-rosa commented 4 years ago

Olá, meu código está imprimindo alguns valores certos porém os últimos ele imprime valores errados para os atendentes e eu não sei o que poderia estar causando esse efeito. A saída no Susy fica assim: image Acredito estar inserindo as pessoas na lista corretamente. O que eu estou fazendo para remover as pessoas da lista é o seguinte:

`void remover(p_no cabeca1, p_no cabeca2, int N, int k, int l) {
p_no no = *cabeca1;

if((*cabeca1)->dado == (*cabeca2)->dado) {

    no->prox->ant = no->ant;    
    no->ant->prox = no->prox;
    *cabeca1 = no->prox;
    *cabeca2 = no->ant;

    if(no == no->prox) {
        *cabeca1 = NULL;
        *cabeca2 = NULL;
    }
    free(no);
    return;
}
/* Atendente 1 */
no->prox->ant = no->ant;    
no->ant->prox = no->prox;   
*cabeca1 = no->prox;
if(no->prox == no) {
    *cabeca1 = NULL;
    free(no);
    return;
}
free(no);           
/* Atendente 2 */
no = *cabeca2;
no->prox->ant = no->ant;
no->ant->prox = no->prox;
*cabeca2 = no->ant;
if(no->ant == no) {
    *cabeca2 = NULL;
    free(no);
    return;
}
free(no);   

}` Tenho uma função para imprimir e depois na main:

`int main() {

int N, C, k, l;
int i,j,r;
p_no lista, cabeca, cabeca1, cabeca2;

scanf("%d %d %d %d", &N, &C, &k, &l);

lista = NULL;       /* crio lista vazia */

for (r=0; r<N; r++) 
    lista = inserir_lista_circular(lista,r);        /* insiro N pessoas na lista */

cabeca = lista;
while (cabeca->dado != C) {
        cabeca = cabeca->prox;
}
cabeca1 = cabeca->prox;
cabeca2 = cabeca->ant;

while(cabeca1 != NULL && cabeca2 != NULL) {     
    for(i=0; i<k-1; i++)        
        cabeca1 = cabeca1->prox;    

    for(j=0; j<l-1; j++)        
        cabeca2 = cabeca2->ant;

    imprime(cabeca1,cabeca2);
    remover(&cabeca1, &cabeca2, N, k, l);
}
return 0;

} ` Alguém sabe o que poderia ser?

iagoac commented 4 years ago

Pelo erro que você está tendo, me parece que você está contando incorretamente o cliente do atendente 1. Note que no teste 01 você chama o cliente 23, quando o correto seria o 24. A mesma coisa acontece no teste 02, onde você chama o cliente 71 ao invés do 72