目标:输入一串有重复数字的数,将重复的数字删去,只保留不重复的 如:输入 1 2 3 1 2 3 输出 1 2 3 结果:我的代码输出的是1 2 3 2 3 为什么?哪里出了问题?

#include<iostream>

using namespace std;

int main()
{
   int a[100]={0};
   int b[100]={0};
   for(int i=0;i<=99;++i){
    cin>>a[i];
    if(cin.get()=='\n'){break;}
   }
   b[0]=a[0];

   for(int i=1;i<=99;++i){
        for(int j=i-1;j>=0;--j){
            if(a[i]!=a[j]){b[i]=a[i];}
            else if (a[i]==a[j]){b[i]=0;}
        }
   }
    for(int i=0;i<=99;++i){
            if(b[i]!=0){
                cout<<b[i]<<" ";
            }
    }

return 0;
}

每次先把b[i]赋值为a[i], 之后找到重复的再把b[i]改成0。并且找到有一个重复的后面就直接break跳出这一层循环,不需要继续循环了
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

#include<iostream>
using namespace std;
int main()
{
   int a[100]={0};
   int b[100]={0};
   for(int i=0;i<=99;++i){
    cin>>a[i];
    if(cin.get()=='\n'){break;}
   }
   b[0]=a[0];
   for(int i=1;i<=99;++i){
        b[i]=a[i]; //每次先把b[i]赋值为a[i]
        for(int j=i-1;j>=0;--j){
            if (a[i]==a[j]){b[i]=0;break;}  //之后找到重复的再把b[i]改成0。并且找到有一个重复的后面就直接break跳出这一层循环,不需要继续循环了
        }
    }
    for(int i=0;i<=99;++i){
            if(b[i]!=0){
                cout<<b[i]<<" ";
            }
    }
    return 0;
}


img

这块逻辑是有问题的,应该是循环一遍后,判断是否有重复值,而不是判断一次不相等,就存入b[i]中。
用一个临时变量,遍历内循环,如果找到相等的,则结束循环。遍历完都没有找到,才放入b[i]中。

for(int j=i-1;j>=0;--j){
            if(a[i]!=a[j]){b[i]=a[i];}
            else if (a[i]==a[j]){b[i]=0;}
        }


代码修改如下,如有帮助,请帮忙采纳一下,谢谢。

#include<iostream>
using namespace std;
int main()
{
    int a[100]={0};
    int b[100]={0};
    int i;
    for( i=0;i<=99;++i){
        cin>>a[i];
        if(cin.get()=='\n'){break;}
    }
    b[0]=a[0];
    int n = i+1;
    int k = 1;
    int x;
    for(i=1;i<n;++i){
        for(x=0;x<k;x++)
        {
            if(a[i] == b[x])
                break;
        }
        if(x == k) b[k++] = a[i];
    }
    for(int i=0;i<k;++i){
        cout<<b[i]<<" ";
    }
    return 0;
}


for(int i=1;i<=99;++i){
        for(int j=i-1;j>=0;--j){
            if(a[i]!=a[j]){b[i]=a[i];}
            else if (a[i]==a[j]){b[i]=0;}
        }
   }
改为
for(int i=1;i<=99;++i){
        for(int j=i+1;j<=99;j++){
            if(a[i]==a[j]){
                  a[j]=0;
              }
        }
   }
最后输出a[i]>0的数即可。


代码重新改正,只加了一个break就对了

#include<iostream>
using namespace std;

int main()
{
   int a[100]={0};
   int b[100]={0};
   for(int i=0;i<=99;++i){
    cin>>a[i];
    if(cin.get()=='\n'){break;}
   }
   b[0]=a[0];

   for(int i=1;i<=99;++i){
        for(int j=0;j<i;++j){
            if(a[i]!=a[j]){b[i]=a[i];}
            else if (a[i]==a[j]){b[i]=0;break;}
        }
   }
    for(int i=0;i<=99;++i){
            if(b[i]!=0){
                cout<<b[i]<<" ";
            }
    }

return 0;
}