先来第1个
public void static main(String args[])
{
byte numbers[]=new byte[50];
Random random = new Random () ;
int count=0;
while(count<=50)
{
int i = random.nextInt (100)
if(i!=0)
{
numbers[j]=(byte)i;
count++;
}
}
for(int j=0;j<numbers.length;j++)
{
if(IsLianxu(numbers,j))
System.out.println(numbers[j]+" "+numbers[j+1]+" "+numbers[j+2]+" "
+numbers[j+3]+" "+numbers[j+4]); }
}
}
public static boolean IsLianxu(byte[] numbers,int index)
{
boolean isLianxu=false;
int len=numbers.length;
if(index+4>=len)
return isLianxu;
int d1=numbers[index]-numbers[index+1];
int d2=numbers[index+1]-numbers[index+2];
int d3=numbers[index+2] - numbers[index+3];
int d4=numbers[index+3]-numbers[index+4];
if((d1==d2)&&(d2==d3)&&(d3==d4)&&(d1==1|d1==-1))
isLianxu=true;
return isLianxu; }
public void static main(String args[])
{
byte numbers[]=new byte[50];
Random random = new Random () ;
int count=0;
while(count<=50)
{
int i = random.nextInt (100)
if(i!=0)
{
numbers[j]=(byte)i;
count++;
}
}
for(int j=0;j<numbers.length;j++)
{
if(IsLianxu(numbers,j))
System.out.println(numbers[j]+" "+numbers[j+1]+" "+numbers[j+2]+" "
+numbers[j+3]+" "+numbers[j+4]); }
}
}
public static boolean IsLianxu(byte[] numbers,int index)
{
boolean isLianxu=false;
int len=numbers.length;
if(index+4>=len)
return isLianxu;
int d1=numbers[index]-numbers[index+1];
int d2=numbers[index+1]-numbers[index+2];
int d3=numbers[index+2] - numbers[index+3];
int d4=numbers[index+3]-numbers[index+4];
if((d1==d2)&&(d2==d3)&&(d3==d4)&&(d1==1|d1==-1))
isLianxu=true;
return isLianxu; }
dx1=Point1.x-Point2.x;dy1=Point1.y-Point2.y;
dx2------------------;dy2=-----------------
-----
-----
-----
dx4=------------------;dy4=---------------
然后保存上一个随机数和一个差值(默认为0),如果这一个随机数和上一个随机数差1且和差值相等(如果差值为0就保存差值),则repeatCount++,
否则repeatCount清零,差值清零
判断repeatCount==5的时候退出随机数抽取。差值作用是判断到底是增1还是减1
再次,如果给定50个数找5个连续数,也不用步进一
假设第一,二,三数连续,第四数不连续,则可以直接步进到第四数,从第四数开始比较随便写写,不知道对不对。
意念匿名...
我的分析://建立数组
int[] Num=new int[50];
//建立新数组
int[] Total=new int[100];
//对应位置填入 比如Total[20]=20
Total[Num[i]]=Num[i];
//如果有连续的5个值不为空 成立
for(i=0;i<Total.length;i++){
if(Total[i]!=null&&Total[i+1]!=null&&.....) (不好意思我记不清楚基本型别数组初始化是不是null了。。)
.......;
1楼的这句好像不太对?
if((d1==d2)&&(d2==d3)&&(d3==d4)&&(d1==1|d1==-1))
isLianxu=true;
不过思路还是很好。。 谢谢
----不会啊,我试了一下,可以的啊,
如1,2,3,4,5,4,3,2,1,3,4,5,6,7,44,56,7,67,68,69,70,71------
能找出来啊
import java.util.*;
public class Test{
public static void main(String args[])
{
byte numbers[]=new byte[50];
Random random = new Random () ;
int count=0;
while(count<50) //1个改动
{
int i = random.nextInt (100);
if(i!=0)
{
//2个改动 for(int j=0;j<50;j++){
numbers[j]=i;
count++;
}
}
}
for(int j=0;j<numbers.length;j++)
{
if(IsLianxu(numbers,j))
System.out.println(numbers[j]+" "+numbers[j+1]+" "+numbers[j+2]+" "+numbers[j+3]+" "+numbers[j+4]);
}
}
public static boolean IsLianxu(byte[] numbers,int index)
{
boolean isLianxu=false;
int len=numbers.length;
if(index+4>=len)
return false;
int d1=numbers[index]-numbers[index+1];
int d2=numbers[index+1]-numbers[index+2];
int d3=numbers[index+2] - numbers[index+3];
int d4=numbers[index+3]-numbers[index+4];
if((d1==d2)&&(d2==d3)&&(d3==d4)&&(d1==1|d1==-1))
isLianxu=true;
return isLianxu;
}
}
成功编译 但运行没有任何结果????????????
2。“只考虑不在一行或一列的情况 也就是斜着连续的情况”
斜着连续需不需要考虑?如果不需要的话,可以采用十字链表,先组织数据,
然后对所有行、所有列的头指针进行扫描,看是否有长度>=5的就ok了