求"连号"的算法....在线.. 算不出来,死了..HELP!!!!!

flowerbacket 2005-06-14 01:31:12

6个数字(N个数字)
如:12 16 17 21 22 23


得结果
连号个数 2+2
连号组数 2
连号列表 ( 5,6 )( 30,31 )

...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
风之影子 2005-06-18
  • 打赏
  • 举报
回复
必须两个连号,
还只对前数组中的前两个连号数对计算吗?
xing_xing_xing 2005-06-18
  • 打赏
  • 举报
回复
// must be sorted
// join[x][0] meaning count of serial
// join[x][1] meaning base of the number
int Joint(UINT join[][2])
{
UINT *pData = new UINT[m_sel - 1];
for(UINT i = 1; i < m_sel; i++)
{
pData[i - 1] = m_pData[i] - m_pData[i - 1];
}
int cnt = 0;
int num = 0;
bool bJoined = false;
for(i = 0; i < m_sel - 1; i++)
{
if(pData[i] == 1)
{
bJoined = true;
if(cnt == 0)
{
join[num][0] = m_pData[i];
cnt = 2;
join[num][1] = cnt;
}
else
{
join[num][1] = ++cnt;
}
}
else
{
cnt = 0;
if(bJoined)
{
num++;
bJoined = false;
}
}
}
if(bJoined)num++;
delete [] pData;
return num;
}
Kvci 2005-06-14
  • 打赏
  • 举报
回复
int a=0,//连号组数
b=0,//连号个数
num[6].
i;
for(i=1;i<=6;i++)
{
if(num[i-1]-nim[i]==-1)//如果当前数比前一个数大一
{
b=b+1;//连号计数器加一
printf("%d",num[i-1]);//并输出前一个数
}
else
{if(b>0)
{printf("%d.此组中有连号%d个\n",num[i-1],b);//否则输出前一个数和连号个数
a=a+1; //组号计数器 加一
}
b=0; //连号计数器置0

}
if(b>0)
{printf("%d.此组中有连号%d个\n",num[i-1],b);//否则输出前一个数和连号个数
a=a+1; //组号计数器 加一
}
printf("共%d组连号")//输出组 数
}
flowerbacket 2005-06-14
  • 打赏
  • 举报
回复

讲讲.....

怎么好办法? 如果不用2+2形式的.
Kvci 2005-06-14
  • 打赏
  • 举报
回复
连号个数 2+2
连号组数 2
连号列表 ( 5,6 )( 30,31 )
这里的输出结果是不是一定要这样?
如果连号个数和连号组数只要最后的结果,而不要写成类似2+2形式
那就好办了
flowerbacket 2005-06-14
  • 打赏
  • 举报
回复
上面写错了.6个数字的例子:

05 06 10 15 30 31

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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