主题:数组的裁剪
_超.C
[专家分:10] 发布于 2010-11-29 20:05:00
从将键盘输入n个整数(0<=n<=20),用一个数组保存这些值,删除数组中所有重复的元素,即保证数组中所有元素具有唯一值。
顺便说一下,我用的Dev-C++'
我是新手。
望高手指点
回复列表 (共6个回复)
沙发
cfj469933485 [专家分:950] 发布于 2010-11-29 21:30:00
//说实话,这个方法不推荐,因为我还没掌握数据结构中的线性表等内容,本人正在学习中。
//等学会,再提供代码。本人也是菜鸟。多多交流。代码就不解释了,感觉很容易懂!
#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;
}
板凳
_超.C [专家分:10] 发布于 2010-11-29 21:35:00
谢谢哥们!不过不需要按大小排序啊。你再看清楚题目啦
3 楼
cfj469933485 [专家分:950] 发布于 2010-11-29 22:23:00
其实我一开始的意思是
输入的6个整数为:
6 5 2 3 2 1
经过排序后1 2 2 3 5 6
当2 和 2 相同时,再比较2 和 3,一旦发现不一样,马上跳出循环。这样可以节约时间。
不知道楼主知道我的意思不?
但是这个程序我没有去考虑。
4 楼
eastcowboy [专家分:25370] 发布于 2010-11-30 20:34:00
在输入的时候就进行检查,如果之前已经输入过了,则这次输入就不要保存了。这样一来,输入结束的时候自然就得到了正确的结果。
5 楼
cfj469933485 [专家分:950] 发布于 2010-12-01 09:10:00
eastcowboy的想法其实我想过,但是楼主的意思不是这样,所以才没编.晚上回去我去实现一下!
看来我得抓紧时间了,刚花二个月学完C,目前正在学习C ++;我得马上学习数据结构啊!
eastcowboy不知道有什么好的建议给新手不?
6 楼
_超.C [专家分:10] 发布于 2010-12-04 09:09:00
两个月就学玩C,你太快了吧
我来回复