Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // uloha9.c -- Patrik Bobocký, 17.10.2018 21:48
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int minimum = 1000;
- void nulRiadok(char *riadok, int n){
- int i;
- for(i = 0; i < n; i++)
- riadok[i] = 0;
- }
- int vyhodnot(char *riadok, int n, int zmenenych){
- char *pomRiadok = (char*)malloc(n*sizeof(char));
- nulRiadok(pomRiadok,n);
- int min, i;
- int lava = 0, prava = n -1 , pomIndex = 0;
- if(prava <= lava){
- if(zmenenych < minimum)
- minimum = zmenenych;
- free(pomRiadok);
- return 0;
- }
- for(;;){
- if(riadok[lava] == riadok[prava]){
- lava++;
- prava--;
- if(lava >= prava)
- break;
- }
- else
- break;
- }
- if(prava == lava) {
- if(zmenenych < minimum)
- minimum = zmenenych;
- free(pomRiadok);
- return 0;
- }
- if((prava - lava) <= 2)
- if(riadok[lava] != riadok[prava]) {
- if(zmenenych + 1 < minimum)
- minimum = zmenenych + 1;
- free(pomRiadok);
- return 1;
- }
- else{
- if(zmenenych < minimum)
- minimum = zmenenych;
- free(pomRiadok);
- return 0;
- }
- if(zmenenych > minimum){
- free(pomRiadok);
- return 1000;
- }
- for(i = lava; i <= prava; i++){
- pomRiadok[pomIndex] = riadok[i];
- pomIndex++;
- }
- if(zmenenych + 1 < minimum){
- char *lRiadok = (char*)malloc((pomIndex+1)*sizeof(char)) , *rRiadok = (char*)malloc((pomIndex+1)*sizeof(char));
- nulRiadok(lRiadok,pomIndex);
- nulRiadok(rRiadok,pomIndex);
- for(i = 0; i < pomIndex - 1; i++){
- rRiadok[i] = pomRiadok[i];
- lRiadok[i] = pomRiadok[i + 1];
- }
- rRiadok[pomIndex] = pomRiadok[0];
- int lmin, rmin;
- lmin = vyhodnot(lRiadok,pomIndex - 1,zmenenych + 1);
- rmin = vyhodnot(rRiadok,pomIndex - 1,zmenenych + 1);
- if(lmin < rmin)
- min = lmin;
- else
- min = rmin;
- if(minimum > min+zmenenych+1)
- minimum = min+zmenenych+1;
- free(pomRiadok);
- return min + 1;
- }
- else
- return 1000;
- }
- int main()
- {
- // sem napis svoje riesenie
- char riadok[1000];
- nulRiadok(riadok, 1000);
- while( scanf("%s",riadok) > 0){
- int len = strlen(riadok);
- int min = 0;
- minimum = 1000;
- min = vyhodnot(riadok,len,0);
- printf("%d\n",min);
- nulRiadok(riadok,1000);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement