[2016/7/29]JAVA之关于约瑟夫问题




/
//     作者:67                                                                                                                 //
//     时间:2016.7.29                                                                                                     //
//     目的:掌握链表,另一种方法代替Josephu问题中查找需要的删除的节点部分                  //
/// 



import java.util.Scanner;
public class Jo {

public static void main(String[] args) {
// TODO Auto-generated method stub
  System.out.println("请输入参加的活动的学生个数:");
  Scanner ss=new Scanner(System.in);
  int s=ss.nextInt();
  System.out.println("请输入从第几位学生开始数:");
  Scanner dd=new Scanner(System.in);
  int d=dd.nextInt();
  System.out.println("请输入需要数的学生个数:");
  Scanner ff=new Scanner(System.in);
  int f=ff.nextInt();
      Lianbiao b=new Lianbiao(s);
      b.lianjie();
      b.begin(3);
      b.much(5);
}

}


//孩子类公共属性
class Child
{
    int number;  //第几个小孩
    Child nextchild=null;    //下一个小孩
    public Child(intnumber)
    {
   this.number=number;
    }
}

//形成链表
class Lianbiao
{
//首链表
Child firstchild=null;
//下一个链表
Child temp=null;
//几位小孩子
int len=0;
Child temp2=null;
public Lianbiao(int len)
{
this.len=len;
}
//环形链表
public void lianjie()  
{
  for(int i=1;i<=len;i++)
 {    
Child a=new Child(i);//给孩子编号
if(i==1)    //为第一个时
{
firstchild=a;
temp=a;
}
else if(1
{
temp.nextchild=a;
temp=a;
}
else if(i==len)//最后一个
{   
temp.nextchild=a;
temp=a;
temp.nextchild=firstchild;
}
System.out.print(" "+temp.number);//输出链表
 }
  System.out.println(" ");
}
//第几个开始数
public void begin(int m)
{
temp=firstchild;
for(int i=1;i
{
temp=temp.nextchild;
}
System.out.print("从第"+temp.number+"位小孩子开始数");
}
//数几个
public void much(int n)
{ 
System.out.println(n+"位小朋友");
do{
    for(int i=1;i
    {
    if(i==n-2)  //前一位
    {
    temp=temp.nextchild;
    temp2=temp;
    }
    else{
    temp=temp.nextchild; //本身需要删除的节点
       }
    }System.out.println("结果为:编号为"+temp.number+"的小朋友out。");
  //删除
  temp2.nextchild=temp.nextchild; 
  temp=temp.nextchild;
len--;
}while(len!=1);
System.out.println("最后胜利者为"+temp.number);
}
}

总结:学习时看到老师是用循环查找的方式找到需要删除的节点的前一位,如果数据大会影响运行速度,所以我用直接用“替身”保留上一位的方式代替。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值