神题!!改一处错误,让其完整运行,各位大神快来解答。
// 原数组:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
// 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
// 删除后:2 3 4 5 6 7 8 9 10 #include<stdio.h>
int f(int x[ ])
{
//从第二个元素开始往后走一边,看一下当前元素跟前面的重复不
//问题是:当我们处理了某个i的重复以后,他之后的元素整体向前挪了一位,可能导致挪之后的当前位仍是重复的,但是目前的程序里,已经进入下一次循环,i+1往后走了。
int flag;
for(int i=1;i<20;i++)
{
flag=0;
for(int j=0;j<i;j++)
{
if(x[j]==x[i])
{ flag=1;
//置1 表示确实在i前面有和他重复的数,flag=1表示,发生重复
}
}
if(flag==1)
{
//A是实现“后面整体往前挪一位”操作 for(int k=i;k<20;k++)
{
if(k==19) x[k]=0;
else x[k]=x[k+1];
}
}
}
int fan=0;
for(i=0;i<20;i++)
{
if(x[i]!=0) fan++;
printf("%d ",x[i]); }
//重复 ----
//不重复。 ----
return fan;
}
void main( )
{ int a[ ]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10};
//20个
printf("\n %d ",f(a));
}
/*编写程序,在被调函数中删去一维数组中所有相同的数,使之只剩一个,数组中的数已按由小到大的顺序排列,被调函数返回删除后数组中数据的个数。
例如:
原数组:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
删除后:2 3 4 5 6 7 8 9 10 返回数据个数:9
*/
代码修改如下:{如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮}。
#include<stdio.h>
int f(int x[]) {
//从第二个元素开始往后走一边,看一下当前元素跟前面的重复不
//问题是:当我们处理了某个i的重复以后,他之后的元素整体向前挪了一位,可能导致挪之后的当前位仍是重复的,但是目前的程序里,已经进入下一次循环,i+1往后走了。
int flag;
int i,k,j,len=20;
for (i = 1; i < len; i++) {
flag = 0;
for (j = 0; j < i; j++) {
if (x[j] == x[i]) {
flag = 1;
break;
//置1 表示确实在i前面有和他重复的数,flag=1表示,发生重复
}
}
if (flag == 1) {
//A是实现“后面整体往前挪一位”操作
for(k=j;k<len;k++)
{
if (k == 19) x[k] = 0;
else x[k] = x[k + 1];
}
i--;
len--;
}
}
int fan = 0;
for (i = 0; i < len; i++) {
if (x[i] != 0) fan++;
printf("%d ", x[i]);
}
//重复 ----
//不重复。 ----
return fan;
}
void main() {
int a[] = {2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10, 10};//20个
printf("\n %d ", f(a));
}
if(k==19) x[k]=0;
改为if(k==19) x[k]=x[0];
你要把 if(k==19) x[k]=0; --->> if(k==19) x[k]=x[0];
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632