算法问题。。 高手来~

anningha 2004-09-13 06:31:26
1。1-100中随机抽取50个数 如何判断其中是否又5个数字是连续的 并且打印出来
2。100个点中随机抽取40个点的坐标(数值在1-100之间)如何判断5个点是连续的 只考虑不在一行或一列的情况 也就是斜着连续的情况
...全文
121 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
opencsdn 2004-09-14
  • 打赏
  • 举报
回复
if((d1==d2)&&(d2==d3)&&(d3==d4)&&(d1==1||d1==-1))
----不会啊,我试了一下,可以的啊,
如1,2,3,4,5,4,3,2,1,3,4,5,6,7,44,56,7,67,68,69,70,71------
能找出来啊
lippea 2004-09-14
  • 打赏
  • 举报
回复
1。我认为先排序,然后按照allenhe(一定要过二级) 的方法对数据扫描一遍
2。“只考虑不在一行或一列的情况 也就是斜着连续的情况”
斜着连续需不需要考虑?如果不需要的话,可以采用十字链表,先组织数据,
然后对所有行、所有列的头指针进行扫描,看是否有长度>=5的就ok了
anningha 2004-09-14
  • 打赏
  • 举报
回复
1楼的有些语法错误 修改一点
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;
}
}
成功编译 但运行没有任何结果????????????
anningha 2004-09-13
  • 打赏
  • 举报
回复
刚才没仔细看
1楼的这句好像不太对?
if((d1==d2)&&(d2==d3)&&(d3==d4)&&(d1==1|d1==-1))
isLianxu=true;
不过思路还是很好。。 谢谢
anningha 2004-09-13
  • 打赏
  • 举报
回复
我也认为先排序 否则isLIANXU得不出正确得结果来
我的分析://建立数组
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了。。)
.......;
allenhe 2004-09-13
  • 打赏
  • 举报
回复
在抽取50个随机数的时候设置一个连续数repeatCount
然后保存上一个随机数和一个差值(默认为0),如果这一个随机数和上一个随机数差1且和差值相等(如果差值为0就保存差值),则repeatCount++,
否则repeatCount清零,差值清零
判断repeatCount==5的时候退出随机数抽取。

差值作用是判断到底是增1还是减1




再次,如果给定50个数找5个连续数,也不用步进一
假设第一,二,三数连续,第四数不连续,则可以直接步进到第四数,从第四数开始比较



随便写写,不知道对不对。
意念匿名...
redspider9999 2004-09-13
  • 打赏
  • 举报
回复
楼上的算法应该先对整个数组进行排序把
opencsdn 2004-09-13
  • 打赏
  • 举报
回复
第2个关键就是判断是不是连续的函数,和上面一个差不多
dx1=Point1.x-Point2.x;dy1=Point1.y-Point2.y;
dx2------------------;dy2=-----------------
-----
-----
-----
dx4=------------------;dy4=---------------
opencsdn 2004-09-13
  • 打赏
  • 举报
回复
先来第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;

}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧