回 帖 发 新 帖 刷新版面

主题:关于第29次编程比赛第1题的结果

       冠军是[color=FF0000]yunzhou008[/color]
算法分析:
简单排序:
   xieyong456(算法没错,题目理解不同,输出不一样,我的问题),
   maobingwen(在temp交换那里错误),
   hmlb(错误),
   廖增祥(思想是对的,但你想的跟你做的不一样),
   laoqiang(没有返回)
   fantasyzzz(用到了stl,但存在效率问题,思想跟廖增祥一样,廖增祥可以看一下)
   pigeonoo(正确,只是效率问题)

堆排:scyangbo(正确,主要耗时用在建堆上)

快速排序:
   fenix(跟我的本意不一样,但在排序上用qsort()肯定不会有问题啦)
   ITER(qsort()毫无疑问的正确)
手写快排:
   yunzhou008(第一个有问题,第二个正确)
类似快排(个人认为比较好的算法):
   johnywoo(有问题,很遗憾)
新颖算法:
   fenix(跟我的本意不一样,但思想上跟iAkiak一样),
   iAkiak(有问题,第二个循环的i是i++,不是i--),
   爱与恨007(小规模数据没问题,但数据一大就有问题)

比较另类算法:
   火海时代(正确)

算法思想没错,但写错了:天国龙(wrong)

写得最认真的程序:
   goal00001111(可惜程序结果有问题)
冒泡加快排:
   Atins(有问题)


有些人在题目理解上跟我的本意不一样,所以我只看算法。
其他人请用这个测试程序检验一下。
特别是goal00001111,你的程序写得很好,很认真,很复杂。但如果下面序列长度比较大,测试次数多点时就会检验都有错误。

yunzhou008 自己写快排,还算认真,最重要还保证了正确性.所以我给他冠军。
其实火海时代也不错,不过看得不是很明白,
scyangbo用到堆排也蛮好的,但是建堆加K次移堆,直接快排更快。
ITER用到了内部函数,正确性毫无疑问,但ITER算是这里的常客了,冠军就不给了
这只是初步结果,如果大家对结果有什么意见,可以提出

下面是测试程序:

#include<iostream>
using namespace std;

//在此处添加你的函数 

inline int Random(int min,int high);
int Partition(int List[],int low,int high);
void Quicksort(int List[],int low,int high);

int main()
{
    const int MAX=1000;
    const int COUNT=1000;
    int List[MAX],L[MAX],len,k,i,j;
    srand((unsigned)time(NULL));
    for(j=0;j<COUNT;j++)
    {
        len=(int)((double)rand()/RAND_MAX*(MAX-1))+1;//creat lengeth of List
        k=(int)((double)rand()/RAND_MAX*(len-1))+1;//creat int k
        for(i=0;i<len;i++)//creat List
        {
            List[i]=Random(0,MAX);
            L[i]=List[i];
        }
       
        Quicksort(L,0,len-1);
       
        if(L[k-1]!=KthNumOfList(List,len,k))//test
            break;
    }
    if(j==COUNT)
       cout<<"Correct!"<<endl;
    else
    {
        cout<<"Wrong!"<<endl;
        cout<<"len = "<<len<<"  k = "<<k<<endl;
        for(i=0;i<len;i++)
            cout<<L[i]<<' ';
        cout<<endl;    
     
       cout<<"Your answer = "<<KthNumOfList(List,len,k)<<endl;
       cout<<"and the correct answer = "<<L[k-1]<<endl;
    }         
                
    getchar();
    getchar();
    return 0;
}


int Partition(int List[],int low,int high)
{
    int pivot=List[low];
    while(low<high)
    {
        while(low<high && List[high]>=pivot)
              high--;
        List[low]=List[high];
        while(low<high && List[low]<=pivot)
              low++;
        List[high]=List[low];
    }
    List[low]=pivot;
    return low;
}

void Quicksort(int List[],int low,int high)
{
    if(low<high)
    {
       int pivot=Partition(List,low,high);
       Quicksort(List,low,pivot-1);
       Quicksort(List,pivot+1,high);
    }
}

inline int Random(int min,int max)
{
    return (int)((double)rand()/RAND_MAX*(max-min))+min;
}    





回复列表 (共33个回复)

21 楼

[quote][quote]写得多不是什么好事啊,说明我的脑子笨,方法差劲啊.
还别说,这次我的代码到底哪里出了问题自己还真没有看出来,为什么错误的地方总是比正确的位置往后移了一位呢?[/quote]

到底有多少人比你笨,看这里[url]http://iq.200.net/[/url][/quote]

第一次测122[em9]

22 楼

[quote]楼主~~~我在
http://www.programfan.com/club/showbbs.asp?id=171479&page=1
14楼的是正确的啊~~~~~你的题目写的有问题~~

你说的是求第几大,要的答案却是第几小~~我两个都放了上去

17楼的是错了~~14楼的是正确的~~[/quote]

真是的,我不是说了我的错了吗?还指出那里错了。你又何必去调试呢[em8][em8]
这里我不是要澄清什么,我只是想和大家讨论一下,我们应该减少
时间复杂度还是空间复杂度。总结一下经验。

23 楼

[quote]到底有多少人比你笨,看这里http://iq.200.net/[/quote]

124,不过我好像几年前就做过一次,那次是在原始德国网站上做的。

24 楼

121 标准差16

25 楼

还有一个地方,题目差不多,大家去看看:http://www.clore.net/tests/iq/index.php
我的成绩:
测试结果:
谢谢您参加智商测试!

 姓    名: 各个
 智商(IQ): 138 (智力超级优秀)
 所用时间: 16:08

===========================
   0 -  49 --极度弱智
  50 -  69 --弱智
  70 -  89 --智力低下
  90 -  99 --智力中等
 100 - 109 --智力中上
 110 - 119 --智力优秀
 120 - 129 --智力非常优秀
 130 - 139 --智力超级优秀
 140 - 174 --天才

26 楼


测试结果:
谢谢您参加智商测试!

 姓    名: batmanlf
 智商(IQ): 137 (智力超级优秀)
 所用时间: 05:36

===========================
   0 -  49 --极度弱智
  50 -  69 --弱智
  70 -  89 --智力低下
  90 -  99 --智力中等
 100 - 109 --智力中上
 110 - 119 --智力优秀
 120 - 129 --智力非常优秀
 130 - 139 --智力超级优秀
 140 - 174 --天才

27 楼

两个地方搞错了,
1.我以为是求第k大的数。
2.判断k和len时,不用=号。


修改KthNumOfList即可。

int KthNumOfList(int List[],int len,int k)
{
    if(k<=0 || k>len)
        return 1001;//k超出范围
    return *nth_element(List,0,len-1,k);
}

28 楼

2次129,然后发现一个题答得不对,第3次140,终于变成超人类了- -

29 楼

第一次 120标差16  昏   第一题楞了半天  以为是多么深奥- -!
看来学编程的就是聪明  哈哈

30 楼

天啊!你们怎么都这么厉害啊?--还做2遍、3遍的...


我用了30min来做这39题--得了116分--和我的体重一样--晕啊...

我来回复

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