Замена альтернативных цифр номера - PullRequest
0 голосов
/ 30 мая 2019

Я работаю с некоторыми проблемами, описанными в модулях хакерранка.Вопрос в том, чтобы поменять местами альтернативные цифры данного числа.

Я попробовал свою логику в C. Это работало для большинства тестовых случаев, но не смог взломать какой-то угловой случай, который я не могу проверить с помощью,Вот что я попробовал.

int main() {
    int n,i,j;
    char a[20];
    scanf("%s",a);
    n=strlen(a);
    if(n==1){
        printf("%s",a);
    }
    else{
        for(i=0,j=i+1;i<n-1 && j<n;i=i+2,j=j+2){
            a[i]^=a[j]^=a[i]^=a[j];
        }
        printf("%s",a);   
    }
    return 0;
}

Я не могу визуализировать тестовые примеры, предоставленные владельцем модуля, поскольку у меня нет к ним доступа.Это были некоторые из практических проблем, которые были даны в моем колледже для подготовки к поступлению.Так что у меня нет доступа к контрольным случаям, и поэтому я не могу предоставить эти неудачные контрольные примеры и их результаты.Кто-то, пожалуйста, помогите мне с тем, что я ошибся в логике.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 30 мая 2019
a[i]^=a[j]^=a[i]^=a[j];

Вы пытаетесь прочитать и записать a[i] и a[j] в одном выражении без точки последовательности.Это вызывает неопределенное поведение .

Разбить выражение на несколько строк.

a[i]^=a[j];
a[j]^=a[i];
a[i]^=a[j];
0 голосов
/ 30 мая 2019
int n = strlen(a);
for ( int i=1; i < n; i+=2 ) {
   char c = a[i-1];
   a[i-1] = a[i];
   a[i] = c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...