怎么用最简单的方法判断3个是否是相邻的数字

csdsuper 2008-11-25 06:28:30
有没有什么好方法判断3个数字相领的,比如
3,4,5
5,4,3
6,5,4

注意,654和465都是相邻数
...全文
1679 65 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
sadan003 2009-06-30
  • 打赏
  • 举报
回复
还是排序,首位和末位的差的绝对值等于数字个数减1
如果有n个数:
Math.Abs( a[0] - a[n-1] ) = n-1
sadan003 2009-06-30
  • 打赏
  • 举报
回复
先排序,排好了,首位 加1 和末位减1 都要等于中间的不久可以了,(升序,降序反之)
waiwenlianxi 2008-11-26
  • 打赏
  • 举报
回复
if(Math.Abs((a[0]-a[1])*(a[1]-a[2])+0.5)==1.5)
{
}

不要符点的话
if(Math.Abs((a[0]-a[1])*(a[1]-a[2])*2+1)==3)
{
}

不要函数的话
if((a[0]-a[1])*(a[1]-a[2])==1||(a[0]-a[1])*(a[1]-a[2])==-2)
{
}
waiwenlianxi 2008-11-26
  • 打赏
  • 举报
回复
回59L 我的33L是一个表达式算出来的。。。
被好多人无视了。。。
csdsuper 2008-11-26
  • 打赏
  • 举报
回复
看来很多都是只能用数组然后排序处理,没有人有什么一个表达式可以算出3个数是否是相邻数吗?
既然这样我把范围说小一点,数字是整数1-6,现在有没有一个表达式可算出来的?
wengjj1985 2008-11-26
  • 打赏
  • 举报
回复
如果数据多一点,不是三位而多位呢?
mdznta2008 2008-11-26
  • 打赏
  • 举报
回复
冒泡排序,然后再做减法就行!
tzbgaler 2008-11-26
  • 打赏
  • 举报
回复
不揣一脚发痒
qinqinhao 2008-11-26
  • 打赏
  • 举报
回复
mark
yanrabbit163 2008-11-26
  • 打赏
  • 举报
回复
41楼的如果是654就不对了,应该取下绝对值
wanghui0380 2008-11-26
  • 打赏
  • 举报
回复
如果都是整数的话,满足条件
1.三数不等
2.max与min差为2
就成

如果是小数,就要问一下“相邻”的定义了。
止戈而立 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 tang718 的回复:]
引用 4 楼 min_jie 的回复:
引用 1 楼 net5i 的回复:
算法这样实现的:三个数字相加等于3的倍数即可

汗。。3、6、9怎么算?

判断前两个数之差的绝对值是1还是2
是2:第3个数==前两数之和/2
是1:第3个数==前两数之和加或减3/2


如果是1、4、9呢
判断前两个数之差的绝对值是1还是[其它]
[/Quote]

晕。。是其他的话,后面就不用判断了,直接就返回false了。。
啊兵 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 min_jie 的回复:]
引用 1 楼 net5i 的回复:
算法这样实现的:三个数字相加等于3的倍数即可

汗。。3、6、9怎么算?

判断前两个数之差的绝对值是1还是2
是2:第3个数==前两数之和/2
是1:第3个数==前两数之和加或减3/2
[/Quote]

如果是1、4、9呢
判断前两个数之差的绝对值是1还是[其它]
derelictangel 2008-11-26
  • 打赏
  • 举报
回复
慢慢学习,帮顶,

PS:
我的目标是 ---->

^_^
wartim 2008-11-26
  • 打赏
  • 举报
回复

namespace WindowsApplication13
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

List<int> Numbers = new List<int>();

Numbers.Add(6);
Numbers.Add(5);
Numbers.Add(4);
MessageBox.Show(IsNearBy(Numbers).ToString());
}

bool IsNearBy(List<int> Numbers)
{
Numbers.Sort();
for (int i = Numbers[0]; i <= Numbers[Numbers.Count - 1]; i++)
if (Numbers.IndexOf(i) == -1)
return false;
return true;
}
}
}
vrhero 2008-11-26
  • 打赏
  • 举报
回复
41楼的算法也不错...
vrhero 2008-11-26
  • 打赏
  • 举报
回复
再来个不用Linq的...两个算法都支持任意个数数组,算法原理见小学数学课本...
bool CheckArray(int[] array)
{
Array.Sort(array);
for (int i = 1; i < array.Length; i++)
{
if (array[i] == array[i - 1])
return false;
}
return array[array.Length-1] - array[0] == array.Length - 1;
}
vrhero 2008-11-26
  • 打赏
  • 举报
回复
lz也太懒了...算法都给你了...
bool CheckArray(int[] array)
{
if (array.Distinct().Count() != array.Length)
return false;
return array.Max() - array.Min() == array.Length - 1;
}

当然...如此简洁的代码需要Linq支持...
justindreams 2008-11-26
  • 打赏
  • 举报
回复
我来说一下我的想法:
第一步:三个数相加
第二布:相加的和除以3-1,相加的和除以3,相加的和除以3+1都在那个数组中
ok了
y63964632 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vrhero 的回复:]
1.判断是否有重复值...有则不是...
2.max-min == 2 即为相邻数...

更多数...max-min == count-1...
[/Quote]

学习~
加载更多回复(45)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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