| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1517 人关注过本帖
标题:求指导算法~斑竹和朋友一起思考一下吧!
只看楼主 加入收藏
dengyiming
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2004-12-17
收藏
 问题点数:0 回复次数:14 
求指导算法~斑竹和朋友一起思考一下吧!

有什么算法可以判断一行顺序自然数中,缺少了其中的一个自然数呢?用什么算法是最简单又有效率的呢?

例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 这排是正常的自然数
1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 这排是缺了一个12的自然数
用什么算法可以知道第二排中的数字缺少一个12呢?怎么算出来比较简单快速?

还有,这是已经有顺序的,如果没有顺序呢?
假设: 1 2 6 18 3 19 7 8 9 14 16 13 20 15 10 4 17 11 5
请问由1开始到数中的最大自然数之间,缺少了那个自然数呢?

[此贴子已经被作者于2006-10-30 21:09:44编辑过]

搜索更多相关主题的帖子: 算法 斑竹 朋友 指导 思考 
2006-10-30 20:59
siruyi
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-10-15
收藏
得分:0 

没有排的先快速排序,排了的当然要顺序找了,,
我想应该不可能有其他办法了,希望有人指教


2006-11-02 20:12
dengyiming
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2004-12-17
收藏
得分:0 
已经摆放很久了,都不见有高手出招!请高手出招啊!
最难的就是找缺了的数字!

[此贴子已经被作者于2006-11-2 20:36:53编辑过]

2006-11-02 20:36
siruyi
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-10-15
收藏
得分:0 
放在数组里的话,二分法对照下标跟元素,一个递归就出来了,又简单又快,算法一维的 复杂度O(n)

2006-11-03 22:14
dengyiming
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2004-12-17
收藏
得分:0 

高手请出招啊,我想不到怎么写,麻烦写个代码算法给小弟看看~
不胜感激

2006-11-04 23:27
凡星
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2006-6-14
收藏
得分:0 
如果是没有顺序的先用快速排序法排序 再用4楼的方法   

只要不是平淡/如果远方呼喊我/我就走向远方
2006-11-05 11:03
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
收藏
得分:0 
for(i=1, j=0; j<n,i<=m;j++) // i为与数组比较的值,j为数组的下标,n为数组长度,m为数组最后一个值大小
{
s=a[j]-i;
if(s==0)
i++;
else if(s==1)
{
System.out.print("所缺少的值为:"+i+"\t");
i+=2;
s=0;
}
}

没排序的先排序再做

[此贴子已经被作者于2006-11-5 14:09:16编辑过]


白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2006-11-05 13:41
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
收藏
得分:0 

以上的算法我试过,可以执行的,望大家指正。
以下是我用C语言实现的这个算法

#include <stdio.h>
main()
{
int a[12]={1,2,3,4,5,6,7,8,10,11,12,14};
int s,i,j;
for(i=1,j=0;j<12,i<=14;j++)
{
s=a[j]-i;
if(s==0)
i++;
else if(s==1)
{
printf("%d\t",i);
i+=2;
s=0;
}
}
getch();
}

执行结果为:9 13

[此贴子已经被作者于2006-11-5 14:17:24编辑过]


白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2006-11-05 13:43
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
收藏
得分:0 
至于连续缺几个数,只需要在for循环里加一些处理条件应该可以实现。

白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2006-11-05 14:14
云中雾
Rank: 1
等 级:新手上路
威 望:1
帖 子:168
专家分:3
注 册:2005-12-30
收藏
得分:0 
至于连续缺少几个数值的问题可以用下面的算法:
for(i=1, j=0; j<n,i<=m;j++) // i为与数组比较的值,j为数组的下标,n为数组长度,m为数组最后一个值大小
{
s=a[j]-i;
if(s==0)
i++;
else if(s>0)
{ for(k=0;k<s;k++)
{
System.out.print(+i+"\t");
i++;
}
i++;
s=0;
}
}
当然这个算法包括的我上面的那个算法,所以还是用这个好一些。

同样我用C语言实现了这个算法的:
#include<stdio.h>
main()
{
int a[11]={1,2,3,4,5,6,7,10,11,12,14};
int s,i,j,k;
for(i=1,j=0;j<12,i<=14;j++)
{
s=a[j]-i;
if(s==0)
i++;
else if(s>0)
{ for(k=0;k<s;k++)
{
printf("%d\t",i);
i++;
}
i++;
s=0;
}
}
getch();
}
运行结果:8 9 13

望大家指正,谢谢!

白色的忧郁让我白色的思念从洁白到苍白,从苍白到空白,比空白更空白,变成深白的坦白!
2006-11-05 14:30
快速回复:求指导算法~斑竹和朋友一起思考一下吧!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015416 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved