社区
C语言
帖子详情
如何对数组中重复的数只输出一次,并输出无重复的数组
camulos
2006-06-14 04:30:42
如何对数组中重复的数只输出一次,并输出无重复的数组
比如:数组a[10]={1,2,3,6,5,4,2,3,1,4} , 这个数组中有好几个数是重复的,我希望输出的结果是(1,2,3,6,5,4)或者(2,3,6,5,4,1)等等任何一种组合结果都可
以。请高手帮忙,谢谢。急急!!!
...全文
1500
15
打赏
收藏
如何对数组中重复的数只输出一次,并输出无重复的数组
如何对数组中重复的数只输出一次,并输出无重复的数组 比如:数组a[10]={1,2,3,6,5,4,2,3,1,4} , 这个数组中有好几个数是重复的,我希望输出的结果是(1,2,3,6,5,4)或者(2,3,6,5,4,1)等等任何一种组合结果都可 以。请高手帮忙,谢谢。急急!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cunsh
2006-06-15
打赏
举报
回复
set hash_set
例如:
int main() {
int arr[] = {1,2,3,6,5,4,2,3,1,4};
set<int> si(arr, arr+10);
copy(si.begin(),si.end(),ostream_iterator<int>(cout , " ") );
}
tailzhou
2006-06-15
打赏
举报
回复
如果重复元素很多的话,我觉得用排序不如用二叉树。
tailzhou
2006-06-15
打赏
举报
回复
sharpdew(风刃) ( ) 信誉:100 2006-6-14 16:55:59 得分: 0
另外使用一个int[10]的数组,假设为b,初始化其中每个元素的值为0(或者最大整数,保证这个值不与原来数组中的数值相同),然后依次取原数组a中的元素,令index = a[i]%10,如果b[index]等于0,则把a[i]拷贝到b[i]处,否则是重复数,扔掉。最后,b数组中不为0的元素就是要求的序列。
你的算法的前提条件是:数组元素的范围为在1-9之间的;
只有数组元素的值在一个较小的范围内,才可以用类似的方法来做。
tom955
2006-06-14
打赏
举报
回复
累死我拉,搞定。
#include <stdio.h>
#include <windows.h>
void outPut(int array[])
{
int i,j,k;
i = 0;
printf("%d,",array[i]);
//获得数组的个数
while(IsBadReadPtr(array[i],sizeof(array)))
{
i++;
}
//printf("%d",i-1);
for(j = 1;j < i-1;j++)
{
for(k = j-1;k > 0;k--)
{
if(array[j] == array[k])
break;
}
if((0 == k)&&(array[0] !=array[j]))
printf("%d,",array[j]);
}
}
main()
{
int a[10]={1,2,3,6,5,4,2,3,1,4};
outPut(a);
return 0;
}
du51
2006-06-14
打赏
举报
回复
#include<stdio.h>
#include<stdlib.h>
#define NONE 0 /*define by yourself*/
void ShowUnique(int arr[],int n)
{
int i,j;
if(!n)return;
for(i=0;i<n;i++)
{
if(arr[i]==NONE)continue;
for(j=i+1;j<n;j++)
{
if(arr[j]==NONE)continue;
if(arr[i]==arr[j])arr[j]=NONE;
}
}
i=0;
while(arr[i++]==NONE);
printf("(%d",arr[--i]);
for(++i;i<n;++i)
{
if(arr[i]!=NONE)printf(",%d",arr[i]);
}
printf(")\n");
}
int main()
{
int arr[]={1,2,3,6,5,4,2,3,1,4};
ShowUnique(arr,sizeof arr/sizeof arr[0]);
system("PAUSE");
return 0;
}
sharpdew
2006-06-14
打赏
举报
回复
那就用-1,当作unsigned的话就是最大整数。
yingge
2006-06-14
打赏
举报
回复
如果数组本身有0呢?
sharpdew
2006-06-14
打赏
举报
回复
int main()
{
int a[10]={1,2,3,6,5,4,2,3,1,4};
int b[10]={0};
for(int i=0; i<10; i++)
{
int index = a[i]%10;
if(!b[index])
b[index] = a[i];
}
for(int i=0; i<10; i++)
if(b[i])
cout << b[i] << endl;
return 0;
}
sharpdew
2006-06-14
打赏
举报
回复
int main()
{
int a[10]={1,2,3,6,5,4,2,3,1,4};
int b[10]={0};
for(int i=0; i<10; i++)
{
int index = a[i]%10;
if(!b[index])
b[index] = a[i];
}
for(int i=0; i<10; i++)
if(b[i])
cout << b[i] << endl;
return 0;
}
sharpdew
2006-06-14
打赏
举报
回复
另外使用一个int[10]的数组,假设为b,初始化其中每个元素的值为0(或者最大整数,保证这个值不与原来数组中的数值相同),然后依次取原数组a中的元素,令index = a[i]%10,如果b[index]等于0,则把a[i]拷贝到b[i]处,否则是重复数,扔掉。最后,b数组中不为0的元素就是要求的序列。
yingge
2006-06-14
打赏
举报
回复
为什么楼主觉得排序不好呢?
minioreo
2006-06-14
打赏
举报
回复
输出前先用一个循环判断当前要输出的数是否与前面的数有重复的 如果有重复则continue判断下一个数 否则输出该数;
SamuelKevin
2006-06-14
打赏
举报
回复
/////////////排序算法
#include <stdio.h>
#include <stdlib.h>
int cmp(const void*a,const void*b);
int main()
{
int i;
int n;
int *num;
printf("请输入数组个数:\n");
scanf("%d", &n);
num = (int *)malloc(sizeof(int)*n);
printf("请输入%d个数字:\n", n);
for (i=0; i<n; i++)
{
scanf("%d", &num[i]);
}
qsort(num,n,sizeof(int),cmp);
printf("输出:\n");
for (i=0; i<n; i++)
{
if (i==0||num[i]!=num[i-1])
{
printf("%d ",num[i]);
}
if (i%10==9)
{
putchar('\n');
}
}
return 0;
}
int cmp(const void*a, const void*b)
{
return *(int *)a-*(int *)b;
}
/////////////非排序算法
感觉开的数组太大了啊
我的想法是开个char flag[2^31-1]
memset(flag,'N',MAX);
然后对数字进行判断啊
camulos
2006-06-14
打赏
举报
回复
能否免去排序的步骤呢?有没有什么算法可以实现
yingge
2006-06-14
打赏
举报
回复
先用qsort排序
然后去掉重复的
算法学习1之找出
数组
中
重复
的数字
找出
数组
中
重复
的数字 在一个长度为n的
数组
里的所有数字都在0到n-1的范围内。
数组
中
某些数字是
重复
的,但不知道有几个数字是
重复
的。也不知道每个数字
重复
几次。请找出
数组
中
任意一个
重复
的数字。 例如,如果输入长度为7的
数组
{2,3,1,0,2,5,3},那么对应的
输出
是第一个
重复
的数字2。 解法一:排序之后进行临位比较 时间复杂度:O(nlogn) 空间复杂度:O(1) public...
数组
重复
数字删除
如果有一个
数组
,无论是随机生成的还是自己输入的,对
数组
中
重复
出现的数字,想要做到删除的效果,如何利用C语言实现? 例如我给出一个
数组
: int arr[10]={ 1,2,3,2,4,2,5,4,4,2}; 可以看到
数组
中
除了1其他数字都是
重复
出现的,那我最后只想留下这样的
数组
: int arr[5]={1,2,3,4,5,}; 我该如何实现呢?请先忽略这里
数组
的顺序,关于
数组
排序的实现方法会在下一篇文章中给出。可以看到,这里我将
重复
出现的数字都进行了删除,并且
数组
定义的常量也从10变成了..
数组
中
重复
的数字(C语言/C++)
题目描述 在一个长度为 n 的
数组
nums 里的所有数字都在 0~n-1 的范围内。
数组
中
某些数字是
重复
的,但不知道有几个数字
重复
了,也不知道每个数字
重复
了几次。请找出
数组
中
任意一个
重复
的数字。 示例 : 输入: [2, 3, 1, 0, 2, 5, 3]
输出
:2 或 3 思路分析 首先想到的是暴力法—两个for循环实现,缺点很明显:用时过多。再进一步可以先排序
数组
然后
一次
for循环,容易找出所有的
重复
元素以及
重复
的次数,用时依旧较长。 我们考虑如果每个数字都置出现
一次
,那么此时是最完美的
输入一个
数组
,对
数组
进行排序,并
输出
该
数组
中
重复
元素出现的次数
*对一个
数组
排序,并
输出
数组
中
重复
元素的个数 * 如: 78,67,98,21,6,9,78,78,78,21 *
输出
:6[1],9[1],21[2],67[1],78[4],98[1] public void sortAndCount(int array[],int length){ //这里有三个问题:排序、统计元素个数、去
算法题:删除
数组
中
存在
重复
的数字,并将剩余数字
输出
1,思路分析 我的思路是在创建一个
数组
,使用两个嵌套for循环对
数组
的每一个元素和其他元素相比较,当发现有相同的数字时则不把这个数字存入到另一个
数组
中
,反之则存入,最后将新建
数组
的元素
输出
出来,同时注意排除
数组
初始化时的0。 2, 代码实现 public static void main(String[] args) { Scanner sc=new Scanner(System.in); int m=0;//标志位,用来判断
数组
中
是否存在相同元素 ...
C语言
69,372
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章