我正在处理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;
}
我无法可视化模块所有者提供的测试用例,因为我无权访问它们。这些是我大学为安置准备所提供的一些实践问题。因此,我无权访问测试用例,这就是为什么无法提供那些失败的测试用例及其输出的原因。有人请帮助我解决我在逻辑上出错的问题。预先感谢。
答案 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;
}