发布时间:2019-08-26 14:00:10
有一百个数字1-100,随机产生20个,求20个不重复的数的和。例如:1,1,1,1,1,1,1,1,1,1,2,2,3,6,3,2,3,2,3,2则20个不重复的数的和=1+2+3+6=12main(){ int num; while(循环20次) { num = GetNumber();//得到一个随机数字 扫面链表; if(链表里面没有这个数字) { 把得到的数字加到链表里; result+= num; } }}上面的思想是,每次得到一个数字,让它和链表里的数字依依比较,如果连表里面没有,就把它直接加到连表里。如果连表里的东西多了的话,那么就要比较很多次,很浪费时间。如果用哈西表的话,就可以通过查找表,一次就确定数字是否重复:main(){ int num; int hash[101];//初始化都等于0 while(循环20次) { num = GetNumber();//得到一个随机数字 if(hash[num]==0) { hash[num]=1; result+= num; } }}
在哈希表中,你不要存入单纯的手机号,而是建个小类,1个字段是手机号,另一个字段是次数,你每次探测到的时候,给这个次数加1