交换数字的备用数字

时间:2019-05-30 17:18:53

标签: c

我正在处理hackerrank模块下给出的一些问题。问题是要交换给定数字的备用数字。

我已经在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 个答案:

答案 0 :(得分:2)

a[i]^=a[j]^=a[i]^=a[j];

您正在尝试在不带序列点的单个表达式中读取和写入a[i]a[j]。这样做会调用undefined behavior

将表达式分成多行。

a[i]^=a[j];
a[j]^=a[i];
a[i]^=a[j];

答案 1 :(得分:0)

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;
}