C语言中,如何用删除法删除数组中相同的数字

例如一个具有10个元素的数组 1 3 3 2 5 1 1 5 6 6,删除相同元素后后变为 1 3 2 5 6,请大虾们帮下忙,最好给出全部程序,必须是删除法,例如发现a[0]==a[5],就用a[6]代替a[5],从而删除a[5]

#include<stdio.h>

intdel_same(intdate[],intn);

intdel_same(intdate[],intn)

{

inti,j,k=0;

for(i=0;i<n;++i)//i用来遍历数组

{

for(j=i+1;j<n&&date[i]-date[j];++j);

if(!(j-n))//没有重复元素

date[k++]=date[i];//可将date[]看作两个数组

}

returnk;//返回删除后的有效长度

}

intmain(void)

{

intdate[1001],i,j,k,n;

printf("输入数据个数:");

scanf("%d",&n);

printf("输入数据:");

for(i=0;i<n;++i)

scanf("%d",date+i);

k=del_same(date,n);

for(i=0;i<k;++i)

printf("%-5d",date[i]);

return0;

}

扩展资料

C语言在数组中删去指定数字

#include<stdio.h>

#include<string.h>

intmain()

{

intn;

scanf("%d",&n);

intarray[10];

intarray_1[10];

intj=0;

for(inti=0;i<10;i++)

{

scanf("%d",&array[i]);

}

for(inti=0;i<10;i++)

{

if(array[i]!=n)

{

array_1[j]=array[i];

++j;//此时j++也是可以的;

}

}

for(inti=0;i<j;i++)

{

printf("%d",array_1[i]);

}

return0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int simplification(int a[], int n) {
int i,j,k;
for(i = 0; i < n - 1; ++i) {
for(j = i + 1; j < n; ++j) {
if(a[i] == a[j]) {
for(k = j; k < n - 1; ++k)
a[k] = a[k + 1];
--j;
--n;
}
}
}
return n;
}

int main() {
int a[30],i,n = 30;
printf("原数组:\n");
srand((unsigned)time(NULL));
for(i = 0; i < n; ++i) {
a[i] = rand()%10;
if(i && i % 10 == 0) printf("\n");
printf("%d ",a[i]);
}
printf("\n");
n = simplification(a,n);
printf("去除相同元素后:\n");
for(i = 0; i < n; ++i) {
if(i && i % 10 == 0) printf("\n");
printf("%d ",a[i]);
}
printf("\n");
return 0;
}

第2个回答  2020-04-17
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int simplification(int a[], int n) {
int i,j,k;
for(i = 0; i < n - 1; ++i) {
for(j = i + 1; j < n; ++j) {
if(a[i] == a[j]) {
for(k = j; k < n - 1; ++k)
a[k] = a[k + 1];
--j;
--n;
}
}
}
return n;
}
int main() {
int a[30],i,n = 30;
printf("原数组:\n");
srand((unsigned)time(NULL));
for(i = 0; i < n; ++i) {
a[i] = rand()%10;
if(i && i % 10 == 0) printf("\n");
printf("%d ",a[i]);
}
printf("\n");
n = simplification(a,n);
printf("去除相同元素后:\n");
for(i = 0; i < n; ++i) {
if(i && i % 10 == 0) printf("\n");
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
第3个回答  2020-02-11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int simplification(int a[], int n) {
int i,j,k;
for(i = 0; i < n - 1; ++i) {
for(j = i + 1; j < n; ++j) {
if(a[i] == a[j]) {
for(k = j; k < n - 1; ++k)
a[k] = a[k + 1];
--j;
--n;
}
}
}
return n;
}
int main() {
int a[30],i,n = 30;
printf("原数组:\n");
srand((unsigned)time(NULL));
for(i = 0; i < n; ++i) {
a[i] = rand()%10;
if(i && i % 10 == 0) printf("\n");
printf("%d ",a[i]);
}
printf("\n");
n = simplification(a,n);
printf("去除相同元素后:\n");
for(i = 0; i < n; ++i) {
if(i && i % 10 == 0) printf("\n");
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
第4个回答  推荐于2017-09-16
main()
{ int i,j,t;
int a[10]={1,3,3,2,5,1,1,5,2,6};
t=a[0]; /*把第一个数赋给t*/
for(i=1;i<10;i++)
{
if (t==a[i]) /*判断是否有相同的*/
{for(j=0;j+i<9;j++)/*用循环进行删除*/
a[i+j]=a[i+j+1];/*后面的数替代前面的*/
a[9]=0;} /*后面补0*/
t=a[i+1]; /*把下一个数赋给t*/
}
for(i=0;i<10;i++)/*输出*/
printf("%d",a[i]);
}本回答被提问者采纳