g3n1us

Untitled

Apr 11th, 2021
431
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdlib.h>
  2.  
  3. #include <string.h>
  4.  
  5. #include <stdio.h>
  6.  
  7. typedef struct listaD {
  8.  
  9.   int carneiros;
  10.  
  11.   int visitado;
  12.  
  13.   struct listaD * prox;
  14.  
  15.   struct listaD * ant;
  16.  
  17. }
  18. ListaD;
  19.  
  20. int
  21. visitedCount(ListaD * L){
  22.   int visited=0;
  23.   ListaD * aux = L;
  24.   while (aux != NULL) {
  25.     if(aux -> visitado == 1){
  26.     visited = visited + 1;
  27.     aux = aux -> prox;
  28.   } else {
  29.     aux = aux -> prox;
  30.   }
  31.   }
  32.   return visited;
  33. }
  34.  
  35. void
  36. printQ(ListaD * L) {
  37.   int i;
  38.   ListaD * aux = L;
  39.   i=0;
  40.   while (aux != NULL) {
  41.     printf("Farm %d\n", i+1);
  42.     printf("Foi visitado? %d\n", aux -> visitado);
  43.     printf("Sheep Amount: %d\n", aux -> carneiros);
  44.     i++;
  45.     aux = aux -> prox;
  46.  
  47.   }
  48.  
  49.   printf("\n");
  50.  
  51. }
  52.  
  53. ListaD*
  54. imprime(ListaD * L) {
  55.  
  56.   ListaD * aux = L;
  57.  
  58.   while (aux != NULL) {
  59.  
  60.     aux->visitado = 0;
  61.  
  62.     aux = aux -> prox;
  63.  
  64.   }
  65.  
  66.   printf("\n");
  67.   return aux;
  68. }
  69.  
  70. int
  71. contaCarneiros(ListaD * L) {
  72.   int stolen;
  73.   ListaD * aux = L;
  74.  
  75.   while (aux != NULL) {
  76.     stolen = stolen + aux->carneiros;
  77.     aux = aux -> prox;
  78.  
  79.   }
  80.  
  81.   return stolen;
  82.  
  83. }
  84.  
  85. void
  86. percorre(ListaD * L) {
  87.  
  88.   ListaD * aux = L;
  89.  
  90.   int count = 0;
  91.  
  92.   while (aux != NULL) {
  93.  
  94.     if (aux -> carneiros == 0) {
  95.  
  96.       aux = NULL;
  97.  
  98.       break;
  99.  
  100.     } else {
  101.  
  102.       if (aux -> carneiros % 2 != 0) {
  103.  
  104.         aux -> visitado = 1;
  105.  
  106.         aux -> carneiros = aux -> carneiros - 1;
  107.  
  108.         aux = aux -> prox;
  109.  
  110.       } else if (aux -> carneiros % 2 == 0) {
  111.  
  112.         aux -> visitado = 1;
  113.  
  114.         aux -> carneiros = aux -> carneiros - 1;
  115.  
  116.         aux = aux -> ant;
  117.  
  118.       }
  119.  
  120.     }
  121.  
  122.     count++;
  123.  
  124.   }
  125.  
  126.   printf("\n");
  127.  
  128. }
  129.  
  130. void
  131. imprimeInvertido(ListaD * L) {
  132.  
  133.   ListaD * aux = L;
  134.  
  135.   while (aux -> prox != NULL)
  136.  
  137.     aux = aux -> prox;
  138.  
  139.   while (aux != NULL) {
  140.  
  141.     printf("%d ", aux -> carneiros);
  142.  
  143.     aux = aux -> ant;
  144.  
  145.   }
  146.  
  147.   printf("\n");
  148.  
  149. }
  150.  
  151. ListaD * insereIni(ListaD * L, int info) {
  152.  
  153.   ListaD * novo;
  154.  
  155.   novo = (ListaD * ) malloc(sizeof(ListaD));
  156.  
  157.   novo -> carneiros = info;
  158.  
  159.   novo -> prox = L;
  160.  
  161.   novo -> ant = NULL;
  162.  
  163.   if (L != NULL)
  164.  
  165.     L -> ant = novo;
  166.  
  167.   return novo;
  168.  
  169. }
  170.  
  171. ListaD * insereFim(ListaD * L, int info) {
  172.  
  173.   ListaD * novo, * aux;
  174.  
  175.   novo = (ListaD * ) malloc(sizeof(ListaD));
  176.  
  177.   novo -> ant = NULL;
  178.  
  179.   novo -> prox = NULL;
  180.  
  181.   novo -> carneiros = info;
  182.  
  183.   if (L == NULL)
  184.  
  185.     return novo;
  186.  
  187.   else
  188.  
  189.   {
  190.  
  191.     aux = L;
  192.  
  193.     while (aux -> prox != NULL)
  194.  
  195.       aux = aux -> prox;
  196.  
  197.     aux -> prox = novo;
  198.  
  199.     novo -> ant = aux;
  200.  
  201.   }
  202.  
  203.   return L;
  204.  
  205. }
  206.  
  207. int
  208. main() {
  209.  
  210.   ListaD * pRef = NULL;
  211.  
  212.   int roubados = 0;
  213.   int totalVisitados = 0;
  214.  
  215.   int carneiros = 0, estrelas = 0, acum;
  216.  
  217.   scanf("%d", & estrelas);
  218.  
  219.   scanf("%d", & carneiros);
  220.  
  221.   acum = carneiros;
  222.  
  223.   pRef = insereIni(pRef, carneiros);
  224.  
  225.   estrelas--;
  226.  
  227.   for (int i = 0; i < estrelas; i++) {
  228.  
  229.     scanf("%d", & carneiros);
  230.  
  231.     acum += carneiros;
  232.  
  233.     pRef = insereFim(pRef, carneiros);
  234.  
  235.   }
  236.  
  237.   imprime(pRef);
  238.   percorre(pRef);
  239.   roubados = contaCarneiros(pRef);
  240.   totalVisitados = visitedCount(pRef);
  241.  
  242.   printf("%d %d\n", totalVisitados, roubados);
  243.  
  244.   return 0;
  245.  
  246. }
  247.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×