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流程控制:也是中断循环内的运行操作,并且从头开始运行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-28

1、首先,点击桌面上的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、电击界面上方的感叹号,开始运行。输入数组的数据。

本回答被网友采纳
第2个回答  推荐于2017-10-15

先排序,在进行遍历比较。

#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;
}

第3个回答  2013-11-06

基本思路

    先将数组排序

    拷贝数组去重

#include <stdlib.h>

int a[] = {56,12,88,88,23,209,11,11,11,33,33,54,0,-3,7,3};
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);
}

第4个回答  推荐于2017-10-07
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了,为什么上面不用呢)

本回答被提问者采纳
相似回答