如何判断一组手机号码的连续性?

microinfotech 2009-07-06 04:00:59
现在有一组排好顺序的手机号码:
13100000001,
13100000002,

13100000004,
13100000005,
13100000006,

13100000008,
13100000009,

13100000012,
13100000015,
13100000018,
13100000033,
……
请问如何构造一个函数,将指定连续的号码导出来,比如指定连续2位的,就导出13100000001,13100000002,13100000008,13100000009;如果指定连续3位的,就导出13100000004,13100000005,13100000006,;以此类推……
请高手赐教,不胜感激……
...全文
176 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
microinfotech 2009-07-09
  • 打赏
  • 举报
回复
谢谢fengjian_428dragonfly001赐教!!!
两个方法写的都很好,领教了……

dragonfly001的方法我测试过了,好像参数nContinueNum的取值还要进一步处理,比如我想取连号位数>=10的,那我要传nContinueNum=9,才能取出想要的连号位数>=10的所有号码,好像把nContinueNum的值给排除在外了,我再研究研究,多谢,这个方法比较通用,很好很强大啊,呵呵……

fengjian_428 2009-07-08
  • 打赏
  • 举报
回复
连续几位的都给你写出来了 连续几位以上的不会自己改一下嘛
dragonfly001 2009-07-08
  • 打赏
  • 举报
回复
测试没问题,nContinueNum 需要连续几位,iNums以排序数组 ,step步差,类似等差数列 也认为是连续的,你需要的是步差为1,供参考
private List<long> GetNums(int nContinueNum, long[] iNums, int step)
{
List<long> li = new List<long>();
List<long> Temp = new List<long>();
if (iNums.Length <= 1)
{
return li;
}
int Monitor = 0;
for (int i = 0; i < iNums.Length - 1; i++)
{
if (iNums[i + 1] - iNums[i] == step)
{
Monitor++;
Temp.Add(iNums[i]);
}
else if (iNums[i + 1] - iNums[i] != step)
{
if (Monitor > 0)
{
Temp.Add(iNums[i]);
if (Monitor >= nContinueNum)
{
for (int k = 0; k < Temp.Count; k++)
{
li.Add(Temp[k]);
}
}
Temp.Clear();
Monitor = 0;
}
}

}
return li;
}
microinfotech 2009-07-08
  • 打赏
  • 举报
回复
不好意思,需求变更下:
现在有一组排好顺序的手机号码:
13100000001,
13100000002,
13100000004,
13100000005,
13100000006,
13100000008,
13100000009,
13100000012,
13100000015,
13100000018,
13100000033,
……
请问如何构造一个函数,将指定连续的号码导出来,比如指定连续2位以上的,就导出13100000001,13100000002,13100000004,13100000005,13100000006,13100000008,13100000009;
如果指定连续3位以上的,就导出13100000004,13100000005,13100000006;
以此类推……
请高手赐教,不胜感激……
yzy8788 2009-07-06
  • 打赏
  • 举报
回复
有点小算法的问题了,写写试试
fengjian_428 2009-07-06
  • 打赏
  • 举报
回复
private List<long> GetNums(int k, long[] iNums)
k参数为需要连续多少个号码 2为找出连续两个的
fengjian_428 2009-07-06
  • 打赏
  • 举报
回复
已测试通过

long[] iNums ={ 13100000001, 13100000002, 13100000004, 13100000005, 13100000006, 13100000008, 13100000009, 13100000012, 13100000015, 13100000018, 13100000033 };
List<long> liRes = GetNums(1, iNums);

private List<long> GetNums(int k, long[] iNums)
{
List<long> li = new List<long>();
int j = 1;
for (int i = 0; i < iNums.Length; i++)
{
if (j == k)
{
if (i == iNums.Length - 1)
{
int ktemp = k;
while (ktemp > 0)
{
li.Add(iNums[i - ktemp + 1]);
ktemp--;
}
}
else if (iNums[i] + 1 != iNums[i + 1])
{
int ktemp = k;
while (ktemp > 0)
{
li.Add(iNums[i - ktemp + 1]);
ktemp--;
}
j = 1;
}
else
{
j++;
}
}
else if (j < k)
{
if (i == iNums.Length - 1)
{
//li.Add(iNums[i]);
}
else if (iNums[i] + 1 != iNums[i + 1])
{
//li.Add(iNums[i]);
j = 1;
}
else
{
j++;
}
}
else
{
if (i == iNums.Length - 1)
{
//li.Add(iNums[i]);
}
else if (iNums[i] + 1 != iNums[i + 1])
{
j = 1;
}
else
{
j++;
}
}
}
return li;
}
bdmh 2009-07-06
  • 打赏
  • 举报
回复
做个简单的数字加减就行了

111,125

社区成员

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

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

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