输入数列:1 2 5 1 1 1 3 7 0(以0为结束标志)
查找的数:1
答案给的结果:2 5 3 7
我的结果: 2 5 1 3 7
程序如下:
#include<iostream.h>
void main()
{
int a[100],i=0,k,j,l,m,cha,gs;
cout<<"请输入数列:";
while(1)
{
cin>>a[i];
if(a[i]==0) break;
i++;
}
cout<<"输入要查找的数:";
cin>>cha;
while(1)
{
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{for(j=k;j<=i-1;j++) {a[j]=a[j+1];}i--;}
}
for(m=0;m<i;m++) {gs=0;if(a[m]==cha) gs++;}//判断前面得到的数组还有多少个要查找的数
if(gs==0) break;//
}
cout<<"处理结果";
for(l=0;l<=i-1;l++) cout<<a[l]<<" ";
}
望高手指教···
第1个回答 2012-04-14
楼主,问题主要出现在这里:
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{for(j=k;j<=i-1;j++) {a[j]=a[j+1];}i--;}
}
为了便于讲解,我把它改成更清晰的格式如下(其实楼主平时也要注意自己代码的清晰度):
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{
for(j=k;j<i-1;j++)
{
a[j]=a[j+1];
}
i--;
}
}
是这样的,当出现“a[k]=cha”(比如k=3时)的时候,你把a[3]之后的所有元素都往前移动一个位置(将找到的元素覆盖),这个时候如果你再k++的话(k变成了4),那么再继续查找的话,下标为3的元素就不会再查找了(但其实这是个没有检查过的元素)。
所以当你查到“a[k]=cha”,然后所有元素前移后,还应该将k减1。所以将上面的代码加一行k--;就行了:
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{
for(j=k;j<i-1;j++)
{
a[j]=a[j+1];
}
i--;
k--;
}
}
再个,楼主,你代码里面很多是没必要的,将第二个while函数替换成上面的代码就行了:
#include<iostream.h>
void main()
{
int a[100],i=0,k,j,l,m,cha,gs;
cout<<"请输入数列:";
while(1)
{
cin>>a[i];
if(a[i]==0) break;
i++;
}
cout<<"输入要查找的数:";
cin>>cha;
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{
for(j=k;j<i-1;j++)
{
a[j]=a[j+1];
}
i--;
k--;
}
}
cout<<"处理结果";
for(l=0;l<=i-1;l++)
cout<<a[l]<<" ";
}
再个,给楼主说一下,平时如果碰到问题,最好先不要问别人,而是自己尽量使用调试解决,这样自己的能力增长得会更快。本回答被提问者采纳
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{for(j=k;j<=i-1;j++) {a[j]=a[j+1];}i--;}
}
为了便于讲解,我把它改成更清晰的格式如下(其实楼主平时也要注意自己代码的清晰度):
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{
for(j=k;j<i-1;j++)
{
a[j]=a[j+1];
}
i--;
}
}
是这样的,当出现“a[k]=cha”(比如k=3时)的时候,你把a[3]之后的所有元素都往前移动一个位置(将找到的元素覆盖),这个时候如果你再k++的话(k变成了4),那么再继续查找的话,下标为3的元素就不会再查找了(但其实这是个没有检查过的元素)。
所以当你查到“a[k]=cha”,然后所有元素前移后,还应该将k减1。所以将上面的代码加一行k--;就行了:
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{
for(j=k;j<i-1;j++)
{
a[j]=a[j+1];
}
i--;
k--;
}
}
再个,楼主,你代码里面很多是没必要的,将第二个while函数替换成上面的代码就行了:
#include<iostream.h>
void main()
{
int a[100],i=0,k,j,l,m,cha,gs;
cout<<"请输入数列:";
while(1)
{
cin>>a[i];
if(a[i]==0) break;
i++;
}
cout<<"输入要查找的数:";
cin>>cha;
for(k=0;k<=i-1;k++)
{
if(a[k]==cha)
{
for(j=k;j<i-1;j++)
{
a[j]=a[j+1];
}
i--;
k--;
}
}
cout<<"处理结果";
for(l=0;l<=i-1;l++)
cout<<a[l]<<" ";
}
再个,给楼主说一下,平时如果碰到问题,最好先不要问别人,而是自己尽量使用调试解决,这样自己的能力增长得会更快。本回答被提问者采纳
第2个回答 2012-04-14
for(m=0;m<i;m++) {gs=0;if(a[m]==cha) gs++;}这一句里,每一次循环都重新赋值0
第3个回答 2012-04-14
为