一个是36选7的算法,用数据结构中的循环链表实现的:
/*直接改动M和N的值应该可以实现M选N的能力
*就是用36选35应该也没问题
*本人没测试过,而且代码有点乱
*高手看着不爽就改改吧*/
class MyNumber
{
//属性
int intNumber=0;
MyNumber next=null;
//定义两个常量来解决36选7,只要改动这两个数就可以任意选了
final static int M = 36;
final static int N = 7;
//如果在后面找不到对应的建议用ctrl+F来找
//定义的方法
public MyNumber addPoint()
{
MyNumber temp=new MyNumber();
this.next=temp;
temp.intNumber=this.intNumber+1;
temp.next=null;
return temp;
}
//创建一个循环链,有36个节点,头节点是head
public void creatLine(MyNumber head)
{
MyNumber p = head;
for(int i=0;i<M;i++)
{
MyNumber s=new MyNumber();
p.next=s;
s.intNumber=p.intNumber+1;
s.next=null;
p=p.next;
s.show();
}
p.next=head; //构成循环,为了随机查找的时候方便
}
//删掉后面的点
public void delPoint(MyNumber p)
{
p.next=p.next.next;
}
//大奖开始摇啦 摇出来的都删掉
//做的还是有点乱,最好改成通用的
public void choosePoint(MyNumber head)
{
MyNumber p = head;
System.out.println ("\n\n\n");
for(int i=0;i<N;i++)
{
int temp=(int)(Math.random()*2*M)+1;
for(int j=0;j<temp;j++)
{
p=p.next;
}
if(p.next==head)
{
p=p.next;
}
p.next.show();
this.delPoint(p);
}
System.out.println ();
}
public void show()
{
System.out.print (intNumber+"\t");
}
}
public class ChoseNumber
{
public static void main(String[] args)
{
MyNumber head = new MyNumber();
head.creatLine(head); //建链
head.choosePoint(head); //摇奖
}
}
另一个是生成新点,技术含量不高,仅供参考
/**
*This is my code.
*<code>new File(this.{@link #getAbsolutePath}())</code>
*
*@author:Zds
*version:1.0
*/
class MyPoint
{
private int x;
private int y;
public void setXY(int m, int n)
{
x=m;
y=n;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public MyPoint clonePoint()
{
MyPoint tp=new MyPoint();
tp.x=-this.y;
tp.y=-this.x;
return tp;
}
public void show()
{
System.out.println("The point is:("+x+","+y+")");
}
}
class TestPoint
{
public static void main(String[] args)
{
MyPoint mp = new MyPoint();
mp.setXY(8,60);
mp.show();
MyPoint other = mp.clonePoint();
other.show();
}
}
发表于 @ 2005年03月07日 19:49:00|评论(loading...)|编辑