Ir para conteúdo
Fórum Script Brasil
  • 0

Problema OBI 2014 ajuda


c+ ou -

Pergunta

Galera,tudo joia? e minha primeira vez aqui,faço faculdade de sistemas de informação e sempre tenho trabalhos para apresentar final de período,nesse de agora estou bem enrolado,queria que me ajudassem com os seguintes problemas,e também vou deixar o código do que tentei fazer,valeu.

Carteiro:

#include<stdlib.h>
#include<stdio.h>
#include <locale.h>
int main (){
   setlocale(LC_ALL,"portuguese");
   int casas,encomendas,ncasa,entrega;
   int tempo;
   puts("Numero de casas");
   scanf("%d", &casas);
   puts("Numero de encomendas");
   scanf("%d", &encomendas);
    for(ncasa=0;casas!=ncasa;ncasa++)
    {
    puts("Digite os numeros das casas");
    scanf("%d",&ncasa);
    }
      for(entrega=0;entrega<=encomendas;entrega++) {     
      puts("Digite onde as encomendas serão entregues"); 
      scanf("%d", &entrega);
      }
      
      
      for(tempo=1;tempo<=encomendas;tempo++){
          printf("%d",tempo);
      }
      
         system("pause");
         return 0;
}

Carteiro.jpeg

Carteiro 2.jpg

War territorio.jpg

war 2.jpg

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

A primeira questão é um pouco estupida acho. "Cansado de subir e descer aquela rua tantas vezes, nosso amigo quer mostrar à empresa quanto ele leva para entregar as encomendas, na tentativa de derrubar essa politica." Tá mais a empresa já não sabe quanto tempo ele leva pra fazer o trajeto? Ou ele quer demostrar o trajeto fazendo ordenadamente? Isso é um pouco confuso acho, ao parecer que ele quer mostrar o tempo que ele leva fazer isso na ordem que vão chegando os pacotes pois esses chegam de forma desordenada, ou seja "10 20 10 40 1", o programa não só é um loop que vai para frente, por exemplo vamos supor que já entregamos 2 pacotes, o 10 e o 20, agora temos que entregar o pacote 10 novamente. Vamos ter que voltar? E si estamos na entrega 40, a seguinte é a 1. Vamos ter que voltar passando por todas as casas e somando uma unidade de tempo por cada uma delas?

Tudo muito confuso isso viu -_-'

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui deixo o que acho que esta correto:

#include <stdio.h>
#include <stdlib.h>

int main (){
    int i = 0, z = 0, unidade = 0;
    int casas= 5;
    int pacotes= 5;

    //int casa[]   = { 1,  5, 10, 20, 40};
    //int pacote[] = {10, 20, 10, 40,  1};
    
    printf ("Infrme o numero de casas: ");
    scanf ( "%d%*c", &casas );

    printf ("Infrme o numero de pacotes: ");
    scanf ( "%d%*c", &pacotes );
 
    int *casa   = (int*)malloc( casas*sizeof( int ) );
    int *pacote = (int*)malloc( pacotes*sizeof( int ) );
    
    printf("\n");
    while ( i < casas ){
        printf ("Casa %d/%d: ", i+1, casas);
        scanf("%d%*c", &casa[i]);
        i++;
    }

    printf("\n");
    i = 0;
    while ( i < pacotes ){
        printf ("Pacote %d/%d: ", i+1, pacotes );
        scanf("%d%*c", &pacote[i]);
        i++;
    }    

    i=0;
    while ( i < pacotes ){
        if ( pacote[i] == casa[z] ){
            //nada
        }else if ( pacote[i] > casa[z] ){
            while ( pacote[i] != casa[z] ){
                unidade++;
                z++;
            }  
        }else{
            while ( pacote[i] != casa[z] ){
                unidade++;
                z--;
            }            
        }
        i++;
    }
    
    printf ("\nTempo em unidades: %d", unidade);
    
    free(casa);
    free(pacote);
    getchar();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

fiz o começo do codigo da guerra por territorio .

a problema esta no inicio do tópico,mais vou tentar explicar o que já fiz e o que me falta.

já fiz com que ele leia o numero de regiões que o usuário  ira digitar,e também o comprimento delas

esse e o exemplo de uma entrada:

numero de regioes: 4(agora meu vetor passa a ter 4 posiçoes)

comprimento das regioes: 5 2 3 10

agora tenho que fazer o seguinte se somar todos os comprimentos terei um total de 20 o que o problema precisa e que esse comprimento seja dividido entre 2 países

então preciso dividir o total(20) por 2 que daria 10, 10 e o tamanho que cada pais tera agora o que preciso e saber em qual posição do vetor acorrera a divisão de territorio para o pais A e B nesse exemplo eles terão 10 cada já que o total foi 20.

o que resta fazer agora e somar os vetores ate que eles sejam igual a 10 assim poderei saber em qual posição dele ocorrera a divisão ou seja

vou somar 5 + 2 +3 que já totalizou 10 ou seja e o pais A fica com 5,3,8(10)  e o B(10)

preciso mostrar na tela em qual posição do vetor ocorreu essa divisão ai teria que sair na posição 3 por que 5+2+3= igual a 10 eo numero 3 foi onde ocorreu o total da soma 10 e é onde sera repartido o territorio.

meu codigo:

 

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
int main (){
   setlocale(LC_ALL,"portuguese");
   int sesao,b=0;
   int k= 0,i=0;
   
   printf("Numero de sessões:");
   scanf("%d", &sesao);
   int comp[sesao];
   int x[sesao];
   int soma1=0,soma2=0;
   int j,y;
   
   for(k=0;k<sesao;k++){
   printf("%d/%d: ",k+1,sesao);
   scanf("%d",&comp[k]);
   soma1=soma1+comp[k];
   soma2=soma2+comp[k];
   b=soma2/2;
       
   }
 

       

 

   printf("%d\n",b);


   
   getchar();
   return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>

int main () {
    setlocale ( LC_ALL, "portuguese" );
    int i = 0,
        tamanho = 0,
        *array = NULL,
        acumulador = 0;
        
        
        
    printf ( "Numero de sessões: " );
    scanf ( "%d", &tamanho );
    
    array = (int*)malloc(sizeof(int)*tamanho);
    
    for (i=0;i<tamanho ;i++ ) {
        printf ( "array[%d]: ", i );
        scanf("%d", &array[i]);
        acumulador += array[i];     
    }
    
    //printf ( "total de %d que /2= %lf \n", acumulador, acumulador/(double)2 );
    
    int pontoJusto = 0;
    i=0;
    while ( ((pontoJusto+=array[i])!= (acumulador/2)) ){
        i++;
    }
    
    printf("\nA posição do vetor ocorreu divisão é: array[%d]\n\n", i);
    
    free(array);
    getchar();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

coloquei a logica dele no meu codigo e ficou assim:

obs:antes dava um erro de array mais era so pa eu tinha copiado e colado do programa dele

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>

int main (){
   setlocale(LC_ALL,"portuguese");
   int sesao;
   int i= 0,acumulador=0;
   
   printf("Numero de sessões:");
   scanf("%d", &sesao);
   int comp[sesao];
   
   for(i=0;i<sesao;i++){
   printf("%d/%d: ",i+1,sesao);
   scanf("%d",&comp);
   acumulador+=comp;
       
   }
   int pontoJusto = 0;
    i=0;
    while(((pontoJusto+=comp)!=(acumulador/2))){
        i++;
    }
    
    printf("\nA divisão ocorreu : %d", i+1);
 

          
   getchar();
   return 0;
}

Editado por c+ ou -
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...