Jump to content
Fórum Script Brasil
  • 0

Problema OBI 2014 ajuda


c+ ou -
 Share

Question

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 to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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;
}

Edited by c+ ou -
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...