将C语言中一个整数数组中的重复元素都去掉,如输入1 1 1 2 3,输出 2 3.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将C语言中一个整数数组中的重复元素都去掉,如输入1 1 1 2 3,输出 2 3.相关的知识,希望对你有一定的参考价值。
我自己写了一个,但不知道有没有缺陷。
#include<stdio.h>
#define N 10
main()
int a[N];
int n;
scanf("%d",&n);
getchar();
int i,j;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (a[i]==a[j]&&i!=j)
break ;
if (a[i]!=a[j])
printf("%d",a[i]);
那么,做到这一步之后,
int a[N],b[N],c[N];
需要将a[N]与b[N]的元素按先后存入这个C数组,如何进行?
不妨设二维数组a[100],b[100],不知道你要存多少,第一个数组用来保存数组中不同种类数的具体值,第二个数组下标对应保存a数组中数的下标,在弄个计算器记录统计过的数的种类,作为a数组每次遍历的次数,初值为0,
遍历输入的数组num,在a中找num[i],如果不存在,则添加到a数组,b数组对应下标添加num[i]在[i]中位置;如果存在,把num中i后面的数组前移,b数组中找到保存的num[i]的下标,也前移,b中下标换为-1,标识已前移,该数已经统计,
数组删除数只能逐个前移,很不方便,链表会简单一些,基本思想就是一个数组存遍历过的数的种类,一个存位置,每次遍历新的在保存的表里找是否存在过,有就数组前移,没有就添加 参考技术A 你程序中的那种赋值方式只能在数组定义的时候赋值,定义完成后,就要一个一个的赋值。比如:s.a[0] = 1;s.a[1] = 2;如果赋值有一定规律的话,可以用for循环;如果赋的值一样的话,可以用 memset(s.a,0,sizeof(s.a));,memset一般用于数组初始化和清零。追问
赋值并没有规律,重复元素出现的没有规律。但知道这个数组中的元素个数,具体需要怎样实现呢?而且需要按数值出现的先后来打印那些没有重复的元素。
c语言编程:输出数组中重复出现的数
假设给定一个长度为10的一维数组,然后用户任意输入10个整数。要输出重复出现的元素,且每个只输出一次。例如:输入1、2、6、4、5、2、2、8、9、6就输出2、6
这个我自己尝试了,但就是搞不定那个只输出一次,求教
int main()
int i,j,k=0,k1,p,a[10],b[5];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[j]==a[i])
p=1;
for(k1=0;k1<k;k1++)
if(a[i]==b[k1])p=0;
if(p)
printf("%d ",a[i]);
b[k++]=a[i];
;
return 0;
参考技术A
为方便测试,直接初始化了数组
#include<stdio.h>int main()
int a[10] = 1,2,6,4,5,2,2,8,9,6 ; //为方便测试,直接初始化了数组
int b[10] = 0 ; //用b记录重复的数值
int i,j,k,l;
l = 0;
for (i = 0; i < 10; ++i)
for(j=i+1;j<10;++j)
if (a[i] == a[j])
for (k = 0; k < l; ++k) //遍历b,是否已记录
if (a[i] == b[k])
break;
if(k==l) //没有,则加入,长度+1
b[l++] = a[i];
for (i = 0; i < l; ++i)
printf("%d ", b[i]);
printf("\\n");
return 0;
本回答被提问者和网友采纳
以上是关于将C语言中一个整数数组中的重复元素都去掉,如输入1 1 1 2 3,输出 2 3.的主要内容,如果未能解决你的问题,请参考以下文章