您的位置:程序门 -> .net技术 -> c#



数据结构好的兄弟们进来,求教一个首领的算法


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


数据结构好的兄弟们进来,求教一个首领的算法[已结贴,结贴人:yudi010]
发表于:2007-03-09 13:24:29 楼主
假设我拥有一个数组,长度为30,然后每一个数组元素里面都有一个唯一的值
然后从头开始,数到六的时候,就把这个数值淘汰,反复循环,直到剩下最后一个为止
请问谁能够把这个算法实现阿
多谢了
发表于:2007-03-09 13:39:211楼 得分:1
这句话矛盾,究竟是一个数组?还是一批数组?
--------------
假设我拥   有一个数组,长度为30,然后   每一个数组   元素里面都有一个唯一的值
发表于:2007-03-09 13:42:112楼 得分:1
是不是这个意思   每6个除掉一个     一直循环到只剩下1个?
循环炼表去搞吧
发表于:2007-03-09 13:50:293楼 得分:1
是josephus问题吧~~刚看了数据结构   c语言用单连表解决的
发表于:2007-03-09 13:54:394楼 得分:1
arraylist   al=new   arraylist();
int   i,index=0;
for(i=0;i <30;i++)   al.add(i);
i=0;
while(al.count!=1)
{
i++;
if(al.count==index)   index=0;
if(i%6==0)
{
al.removeat(index);
i=0;
index--;
}
index++;
}//第一印象写出来的
发表于:2007-03-09 19:56:175楼 得分:1
在计算机中数组是线性结构,
你重复从头开始数[1..6],   肯定会剩下数组最后的5个元素。

搂住的题意数据不是放在数组中,一般是在链表结果中才会剩下一个
发表于:2007-03-09 20:03:156楼 得分:1
最后5个怎么删除?这种问题干吗的?
发表于:2007-03-09 21:06:117楼 得分:1
用单循环链表就可以实现
发表于:2007-03-09 21:45:078楼 得分:1
长度固定30,步长固定6     ,没什么好算法不算法的。


int   i   =   4;
发表于:2007-03-11 10:25:309楼 得分:0
貌似用二维数组搞定
发表于:2007-03-11 16:48:1810楼 得分:1
arraylist   arr   =   new   arraylist();
for(int   i=0;i <30;i++)
{
    arr.add(i);
}
int   index=0;
int   step   =6;
while(arr.count> 1)
{
    for(t=0;t <step;t++)
    {
        indexincream(index);
    }
    arr.removeat(index);
    indexincream(index);
}
return   arr[0];

------------------
void   indexincream(ref   int   index)
{
    index+=1;
    if(index> =arr.count)
    {
        index=0;
    }
}
发表于:2007-03-11 16:53:2411楼 得分:1
using   system;
using   system.collections;

public   class   myclass
{
public   static   void   main()
{
arraylist   arr   =   new   arraylist();
for(int   i=0;i <30;i++)
{
arr.add(i);
}
int   index=0;
int   step   =6;
while(arr.count> 1)
{
for(int   t=0;t <step;t++)
{
indexincrease(ref   index,arr);
}
arr.removeat(index);
indexincrease(ref   index,arr);
}
wl(arr[0].tostring());
rl();
}

#region   helper   methods

private   static   void   wl(object   text,   params   object[]   args)
{
console.writeline(text.tostring(),   args);
}

private   static   void   rl()
{
console.readline();
}

private   static   void   break()  
{
system.diagnostics.debugger.break();
}

#endregion


static   void   indexincrease(ref   int   index,arraylist   arr)
{
index+=1;
if(index> =arr.count)
{
index=0;
}
}

}

---------------------
答案是29
(如果我的解法没有错的话)
发表于:2007-03-11 17:21:4612楼 得分:2
using   system;
using   system.collections;

public   class   myclass
{
public   static   void   main()
{
int   total=30;
int   step   =6;
arraylist   arr   =   new   arraylist();
for(int   i=0;i <total;i++)
{
arr.add(i+1);
}
int   index=0;
while(arr.count> 1)
{
for(int   t=0;t <step-1;t++)
{
index+=1;
if(index> =arr.count)
{
index=0;
}
}
arr.removeat(index);
if(index> =arr.count)
index=0;
}
console.writeline(arr[0].tostring());
console.readline();
}
}
刚才错了,不好意思,答案就是syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)   所说的4
发表于:2007-03-12 08:10:4213楼 得分:1
class   myclass
        {
                static   void   main(string[]   args)
                {
                        int   index   =   0;
                        myclass   pg   =   new   myclass();
                        arraylist   al   =   new   arraylist(30);
                        for   (int   i   =   0;   i   <   30;   i++)
                        {
                                al.add(i);
                        }
               
                        for   (;   ;   index++)
                        {
                                if   (al.count   <=   1)
                                {
                                        break;
                                }
                                else   if   ((index   +   1)   %   6   ==   0)
                                {
                                        al.removeat(index%al.count);
                                        pg.display(al);
                                }
                       
                        }
                        pg.display(al);//其值即为原arraylist的索引。
                       
                }

                public   void   display(arraylist   al)
                {
                        foreach   (int   i   in   al)
                        {
                                console.write(i.tostring()   +   "   ");
                        }
                        console.writeline();
                }
               
        }
果然   int   index   =   4;
发表于:2007-03-14 15:50:3014楼 得分:0
强手真多
我想了半天也没有得出好的解法
谢谢大家


快速检索

最新资讯
热门点击