这个代码跑不出来 想知道哪里错了

输入01序列 长度为n
将随便两个0和1交换位置 使最后的序列和原序列不一样


#include<stdio.h>
int main(){
    int n,cnt1=0,cnt2=0;
    int a[2000000]={0},a1[2000000]={0},a2[2000000]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<=n;j++){//想的是如果i和i+1位置一个是1一个是0就交换
        if(a[i]==1&&a[j]==0){
    int temp;
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
        }
    }
}
    for(int i=0;i<n;i++)
    printf("%d",a[i]);
    return 0;
    
} 

谢谢大家!

既然是随便2个,那你不需要双重for循环
就让第0个和其中的某一个交换,反正只要不一样不就行了
交换完就break啊,不要一直这样交换下去

数组太大了,减到十

运行了一下,直接就退出了。问题出在第5行,定义静态数组是有大小限制的,a1和a2用不到的话建议直接删了,或者把数组长度改小。另外,比较两个元素是否相同可以用异或运算。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632