C语言问题 把一个数组中的重复元素去掉
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言问题 把一个数组中的重复元素去掉相关的知识,希望对你有一定的参考价值。
#include"stdio.h"
int main()
int a[10],i,j,m=0;
printf("输入数组:\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<=9;i++)
for(j=i+1;j<=9;)
if(a[j]==a[i])
for(;j<=8;j++)
a[j]=a[j+1];
m++;
j=i+1;
else
j++;
for(i=0;i<=9-m;i++)
printf("%d",a[i]);
return 0;
求改!
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
去掉字符串中重复的字符并排序
int main()
string input;
while (cin>>input)
int count = 0; // 统计有多少个空格
for (int i = 0; i < input.size(); i++)
for (int j = i+1; j < input.size(); j++)
if (input[i] == ' ')
break;
if (input[i] == input[j])
input[j] = ' ';
count++;
int newsize = input.size() - count;
string str(newsize,'0'); //创建一个长为newsize,用‘0’填充的字符串
int j = 0;
for (int i = 0; i < input.size(); i++)
if (input[i] != ' ')
str[j] = input[i];
j++;
sort(str.begin(), str.end());
cout << str<<endl;
扩展资料:
while语句若一直满足条件,则会不断的重复下去。但有时,需要停止循环,则可以用下面的三种方式:
一、在while语句中设定条件语句,条件不满足,则循环自动停止。
如:只输出3的倍数的循环;可以设置范围为:0到20。
二、在循环结构中加入流程控制语句,可以使用户退出循环。
1、break流程控制:强制中断该运行区内的语句,跳出该运行区,继续运行区域外的语句。
2、continue流程控制:也是中断循环内的运行操作,并且从头开始运行。
参考技术A1、首先,点击桌面上的VC++6.0,打开软件。
2、打开软件之后,点击右上方的【文件】【新建】。进入后,再点击【文件】,选择c++ source file.最后点击【确定】。
3、输入代码(定义数组): int i; int x[7]; for(i=0;i<7;i++) printf("x[%d]:",i);scanf("%d",&x[i]); 。
4、输入代码(对元素进行倒序排列): for(i=0;i<3;i++) int temp=x[i]; x[i]=x[6-i]; x[6-i]=temp; 。
5、电击界面上方的感叹号,开始运行。输入数组的数据。
参考技术B先排序,在进行遍历比较。
#include <stdio.h>// 升序数组src
void sort(int *src, int len)
int tem;
for (int i = 0; i < len; i++)
for (int j = 0; j < len - i - 1; j++)
if (src[j] > src[j+1])
tem = src[j];
src[j] = src[j+1];
src[j+1] = tem;
int main()
int num[10] = 0, 2, 5, 1, 1, 5, 4, 9, 2, 1, d;
int i = 0, cnt;
sort(num, 10); // 排序
d = num[0];
for (i = 1; i < 10; i++) // 遍历比较
if (num[i] != d)
printf("%d ", d);
d = num[i];
if (num[9] == d)
printf("%d\\n", d);
return 0;
参考技术C
基本思路
先将数组排序
拷贝数组去重
int b[16];
int less(void *a, void *b)
return *((int *)(a))-*((int *)(b));
int unique(int * input, const int size_input, int * ans)
int size_ans = 0;
int ii = 0;
if (size_input <= 0||input==0||ans==0) return 0;
qsort(a,size_input,sizeof(int),less);
ans[size_ans] = input[0];
for (; ii<size_input;++ii)
if (ans[size_ans] != input[ii])
++size_ans;
ans[size_ans] = input[ii];
return size_ans + 1;
int main()
int size=unique(a,16,b);
参考技术D int main()
int a[10],i,j,m=0;
printf("输入数组:\\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9-m;i++)//i<=9---->i<9-m
for(j=i+1;j<=9-m;)//j<=9---->j<=9-m
if(a[j]==a[i])
for(;j<=8-m;j++)//j<=8----j<=8-m
a[j]=a[j+1];
m++;
j=i+1;
else
j++;
for(i=0;i<=9-m;i++)
printf("%d ",a[i]);
return 0;
其实就是改了下循环条件而已(既然下面的循环都用了m了,为什么上面不用呢)
本回答被提问者采纳如何去掉一个数组的重复元素:数组去重
可以使用双重循环,逐一对比元素,如有重复,则删除的方法去重。其思路为
1、依次遍历循环中的每一个元素。
2、对于任意一个元素,依次与之前的元素进行对比,如果有重复则删除。
3、删除操作可以采用将后续元素逐个前移,达到覆盖当前元素的效果。
在此基础上可以进行一点优化,即,不需要每次删除元素均前移所有元素,而是把需要保留的元素放到"应该"放的位置即可,这样可以提高效率。
以整型数组为例,参考代码如下:
1234567891011121314
int remove_repeat(int *a, int l)//对起始地址为a,长度为l的数组进行去重,新的长度以返回值形式返回。 int i,j, r=0; //i,j为循环下标,r为去重后元素总数,初始值为0 for(i = 0; i < l; i ++) for(j = 0; j < r; j ++)//检查是否重复 if(a[j] == a[i]) break; if(j == r) //没有重复元素 a[r++] = a[i]; //将当前元素放置与去重后数组的尾部,并增加去重后的总数。 return r; //返回新的长度。 参考技术A function removeDop(arr)//数组去重
return [...new Set(arr)];
以上是关于C语言问题 把一个数组中的重复元素去掉的主要内容,如果未能解决你的问题,请参考以下文章
将C语言中一个整数数组中的重复元素都去掉,如输入1 1 1 2 3,输出 2 3.