回 帖 发 新 帖 刷新版面

主题:数组的裁剪

从将键盘输入n个整数(0<=n<=20),用一个数组保存这些值,删除数组中所有重复的元素,即保证数组中所有元素具有唯一值。
顺便说一下,我用的Dev-C++'
我是新手。
望高手指点

回复列表 (共6个回复)

沙发

//说实话,这个方法不推荐,因为我还没掌握数据结构中的线性表等内容,本人正在学习中。
//等学会,再提供代码。本人也是菜鸟。多多交流。代码就不解释了,感觉很容易懂!
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, *p;
    int count = 0;//用来计数
    int i, j;//用于排序
    int temp;//临时变量

    printf("请输入需要的整数个数:");
    scanf("%d", &n);
    p = (int *)malloc(sizeof(int) * n);
    while(count < n)
    {
        printf("请输入需要第%d个整数:", count + 1);
        scanf("%d", &p[count]);
        count ++;
    }
    
    printf("输入的整数为:\n");
    for(i = 0; i < n; i ++)
    {
        printf("%2d ", p[i]);
    }
    printf("\n");

    for(i = n - 1; i > 0; i --)//冒泡排序法
    {
        for(j = 0; j < i; j ++)
        {
            if(p[j] > p[j + 1])
            {
                temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
            }
        }
    }


    for(i = 0; i < n; i ++)
    {
        //temp = p[i];
        for(j = i + 1; j < n; j ++)
        {
            if(p[i] == p[j])
            {
                p[i] = 0;
            }
        }
    }
    printf("排序后整数为:\n");
    for(i = 0; i < n; i ++)
    {
        if(p[i] != 0)
        {
            printf("%2d ", p[i]);
        }
    }
    printf("\n");
    system("pause");
    return 0;
}

板凳

谢谢哥们!不过不需要按大小排序啊。你再看清楚题目啦

3 楼

其实我一开始的意思是
输入的6个整数为:
6 5 2 3 2 1

经过排序后1 2 2 3 5 6
当2 和 2 相同时,再比较2 和 3,一旦发现不一样,马上跳出循环。这样可以节约时间。
不知道楼主知道我的意思不?
但是这个程序我没有去考虑。

4 楼

在输入的时候就进行检查,如果之前已经输入过了,则这次输入就不要保存了。这样一来,输入结束的时候自然就得到了正确的结果。

5 楼

eastcowboy的想法其实我想过,但是楼主的意思不是这样,所以才没编.晚上回去我去实现一下!
看来我得抓紧时间了,刚花二个月学完C,目前正在学习C ++;我得马上学习数据结构啊!
eastcowboy不知道有什么好的建议给新手不?

6 楼

两个月就学玩C,你太快了吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册