#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;
}
这块逻辑是有问题的,应该是循环一遍后,判断是否有重复值,而不是判断一次不相等,就存入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;
}