Advertisement
Guest User

FIIT-SEMAP2-uloha9

a guest
Nov 14th, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.45 KB | None | 0 0
  1. // uloha9.c -- Patrik Bobocký, 17.10.2018 21:48
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6.  
  7. int minimum = 1000;
  8.  
  9. void nulRiadok(char *riadok, int n){
  10.   int i;
  11.   for(i = 0; i < n; i++)
  12.     riadok[i] = 0;
  13. }
  14.  
  15. int vyhodnot(char *riadok, int n, int zmenenych){
  16.     char *pomRiadok = (char*)malloc(n*sizeof(char));
  17.     nulRiadok(pomRiadok,n);
  18.     int min, i;
  19.     int lava = 0, prava = n -1 , pomIndex = 0;
  20.     if(prava <= lava){
  21.       if(zmenenych < minimum)
  22.         minimum = zmenenych;
  23.         free(pomRiadok);
  24.       return 0;
  25.     }
  26.     for(;;){
  27.       if(riadok[lava] == riadok[prava]){
  28.         lava++;
  29.         prava--;
  30.         if(lava >= prava)
  31.           break;
  32.       }
  33.       else
  34.         break;
  35.     }
  36.     if(prava == lava) {
  37.       if(zmenenych < minimum)
  38.         minimum = zmenenych;
  39.         free(pomRiadok);
  40.       return 0;
  41.     }
  42.     if((prava - lava) <= 2)
  43.       if(riadok[lava] != riadok[prava]) {
  44.         if(zmenenych + 1 < minimum)
  45.           minimum = zmenenych + 1;
  46.           free(pomRiadok);
  47.         return 1;
  48.       }
  49.       else{
  50.         if(zmenenych < minimum)
  51.           minimum = zmenenych;
  52.           free(pomRiadok);
  53.         return 0;
  54.       }
  55.     if(zmenenych > minimum){
  56.       free(pomRiadok);
  57.       return 1000;
  58.     }
  59.     for(i = lava; i <= prava; i++){
  60.       pomRiadok[pomIndex] = riadok[i];
  61.       pomIndex++;
  62.     }
  63.     if(zmenenych + 1 < minimum){
  64.       char *lRiadok  = (char*)malloc((pomIndex+1)*sizeof(char)) , *rRiadok = (char*)malloc((pomIndex+1)*sizeof(char));
  65.       nulRiadok(lRiadok,pomIndex);
  66.       nulRiadok(rRiadok,pomIndex);
  67.       for(i = 0; i < pomIndex - 1; i++){
  68.         rRiadok[i] = pomRiadok[i];
  69.         lRiadok[i] = pomRiadok[i + 1];
  70.       }
  71.       rRiadok[pomIndex] = pomRiadok[0];
  72.      
  73.       int lmin, rmin;
  74.    
  75.       lmin = vyhodnot(lRiadok,pomIndex - 1,zmenenych + 1);
  76.       rmin = vyhodnot(rRiadok,pomIndex - 1,zmenenych + 1);
  77.       if(lmin < rmin)
  78.         min = lmin;
  79.       else
  80.         min = rmin;
  81.       if(minimum > min+zmenenych+1)
  82.         minimum = min+zmenenych+1;
  83.       free(pomRiadok);
  84.       return min + 1;
  85.     }
  86.     else
  87.       return 1000;
  88. }
  89.  
  90. int main()
  91. {
  92.   // sem napis svoje riesenie
  93.   char riadok[1000];
  94.   nulRiadok(riadok, 1000);
  95.   while( scanf("%s",riadok) > 0){
  96.     int len = strlen(riadok);
  97.     int min = 0;
  98.     minimum = 1000;
  99.     min = vyhodnot(riadok,len,0);
  100.     printf("%d\n",min);
  101.     nulRiadok(riadok,1000);
  102.   }
  103.  
  104.   return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement