| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 719 人关注过本帖
标题:求解题,读入数字,判断是否与前面重复,是则删除
只看楼主 加入收藏
轻风无言
Rank: 2
等 级:论坛游民
帖 子:27
专家分:25
注 册:2012-12-19
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:11 
求解题,读入数字,判断是否与前面重复,是则删除
(消除重复)使用一个单下标数组来解决一下问题。读入20个大小在10到100之间( 包含10 和100)的数据。每读入一个数据,如果它不与前面读入的数据相重复,则将其打印出来。假设“最坏情况”是最坏20个数据都不相同,请使用尽可能小的数组来解决问题。
我的意思是不要全部都读入数组再判断有没有重复啊,是读一个判断一个,谢谢
搜索更多相关主题的帖子: 打印 
2012-12-25 00:21
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:0 
问问题前,提前说出自己的想法

WE GO
2012-12-25 00:25
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:0 
楼上正解! 不然就以求答案帖看待。。。

有心者,千方百计;无心者,千难万难。
2012-12-25 00:43
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:20 
程序代码:
#include <stdio.h>

int main(void)
{
    int table[91] = { 0 }, i, n;
    for (i = 0; i < 20; ++i) {
        scanf("%d", &n);
        ++table[n-10];
    }
    for (i = 0; i < 91; ++i)
        if (table[i]) printf("%d\n", i + 10);
    return 0;
}

查表的效率是最好的,输出结果还是升序的。

My life is brilliant
2012-12-25 00:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:5 
"请使用尽可能小的数组来解决问题"
-----
如果是指元素数目小,那么最起码得定义能包含10到100数值的元素19个,假设用char来保存数值,也就是得char[19].
在这种情况下,每读入一个数据,用二分查找算法在已有的数据中查找;如果没能找到,则将其插入排序。
因为每次需要数据搬移,所以这个效率不会很高。
考虑到“10到100之间( 包含10 和100)的数据”一共才91个数据(最后一个只需要判断,不需要保存,其实只需要90个数据),若以1bit来表示其是否存在,那就需要91bits/8=12bytes,也就是uint32_t[3]就行了。
2012-12-25 08:32
lupeifeng123
Rank: 2
等 级:论坛游民
帖 子:74
专家分:47
注 册:2012-12-13
收藏
得分:0 
也学习了

一步一个脚印,贵在坚持。
2012-12-25 08:42
轻风无言
Rank: 2
等 级:论坛游民
帖 子:27
专家分:25
注 册:2012-12-19
收藏
得分:0 
回复 2楼 cyhdahua
问题里面已经说的很清楚了,我没有贴上自己的程序是因为那程序老是调试不达标,并不是因为我没做,还有个就是想看看别人怎么实现的,不要受到我思想的干扰,题目就是那个,书上抄的一模一样的,
2012-12-25 09:31
轻风无言
Rank: 2
等 级:论坛游民
帖 子:27
专家分:25
注 册:2012-12-19
收藏
得分:0 
回复 3楼 w527705090
我是在做题,程序没打什么注释,程序又长,我想贴上自己的程序让别人检查,还不如重打有效率,对于高手,我猜是这样
2012-12-25 09:34
轻风无言
Rank: 2
等 级:论坛游民
帖 子:27
专家分:25
注 册:2012-12-19
收藏
得分:0 
回复 4楼 lz1091914999
谢谢你的回复,你的程序运行没问题,就是不是我题目想的那样,如果连续输入相同的数,就不要把相同的数显示出来
2012-12-25 09:40
wkz2012
Rank: 4
等 级:业余侠客
帖 子:123
专家分:253
注 册:2012-12-13
收藏
得分:5 
再设一个boolean的数组,分别表示20到100之间所有数的情况,刚开始全为false
每次读入一个数之前先判断boolean数组是否为true,是则不读入,否则读入,并将该数所代表的在boolean数组中的元素设为true。如此循环就行了

我了个去的编程!
2012-12-25 09:53
快速回复:求解题,读入数字,判断是否与前面重复,是则删除
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.094638 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved