| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2278 人关注过本帖
标题:试题,找出单独的数字,求解
只看楼主 加入收藏
何小达
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:70
注 册:2017-5-25
结帖率:100%
收藏
已结贴  问题点数:16 回复次数:17 
试题,找出单独的数字,求解
图片附件: 游客没有浏览图片的权限,请 登录注册


#include "stdio.h"
void main()
{long a[500];
 int n,i,b[500]={0},c[500];
 scanf("%d",&n);
 for(i=0;i<n;i++)
     {scanf("%ld",&a[i]);
         b[a[i]]=b[a[i]]+1;
         c[a[i]]=a[i];
         }
     for(i=0;i<n;i++)
     if(b[a[i]]==1)
     printf("%d",c[a[i]]);
  
}
我要怎么改才符合题意!!!
搜索更多相关主题的帖子: include include 
2017-05-27 21:04
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:4 
数组长度,最大501。

[此贴子已经被作者于2017-5-27 21:07编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-27 21:05
何小达
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:70
注 册:2017-5-25
收藏
得分:0 
回复 2楼 renkejun1942
这个我后来想到了,但是不知道改怎么改了,给点建议吧
2017-05-27 21:23
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
我对这些题没有兴趣。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-27 21:24
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:4 
回复 3楼 何小达
大数据索引~如果要高效的话就就用哈希~不过对于哈希我就对链式处理冲突了解一点~~
PS~可以在输入数据的时候就用哈希索引处理~根据题意对重复数据出现处理冲突会比较多~可以试试用链式哈希~不过这方法不是万能~如果是人为精心制作数据对哈希表进行攻击则效率还是很低的~

[此贴子已经被作者于2017-5-27 22:09编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-27 21:30
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
感觉这题用的是分解法~其实可以统计数字0-9出现的总次数~然后根据出现次数与其它数字就可以推测出该数是由什么数字组成了~然后再找到与该数位组成一样的就可以了~

PS~还需考虑正负号问题~可以用一个二元数组来的其中一元来记录正负号~

[此贴子已经被作者于2017-5-27 22:06编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-27 21:44
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:4 
回复 楼主 何小达
long a[500];
 int n,i,b[500]={0},c[500];
 scanf("%d",&n);
 for(i=0;i<n;i++)
     {scanf("%ld",&a[i]);
         b[a[i]]=b[a[i]]+1;
         c[a[i]]=a[i];
a[i]在-2147483648...2147483647范围,b[a[i]]和c[a[i]]可能会越界。
2017-05-27 22:02
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 6楼 九转星河
可以需要一张2^16或者2^8的哈希表(在空间允许的范围内就行了)~用取余数组长度的形式作为哈希索引处理~这样可以大大减少冲突问题~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-27 22:15
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
PS~其实感觉没有必要记录数据~把数据取余记录其出现次数就行了~

可以这样试试~因为其余数据都是出现3次~

b[a[i]%1024]+=(int )pow((int )(log(a[i])/log(1024)),8);这样是不是简单很多~还得要分正负数讨论~~

解释一下~之所以取8次方是因为数据最多出现3次<8次~用8进制可以确保不同段位冲突组合的唯一性~

感觉这就是一张比较简单的带有哈希性质的数组~不过记录的不是数据本身而是其余数罢了~就是这样~~

[此贴子已经被作者于2017-5-27 23:07编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-27 22:35
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
时间复杂度是o(n)
o的常数为数据范围除以索引表长度~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-27 22:41
快速回复:试题,找出单独的数字,求解
数据加载中...
 
   



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

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