求一个简单的C语言算法题

kinsey0514 2007-02-05 09:48:12
找出所有六位数中满足下列条件的数字

就是若在此6位数中相邻3个或3个以上数字相同,找出这些数,并显示出来。
...全文
476 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzwyg 2007-02-06
  • 打赏
  • 举报
回复
排列效率最高
  • 打赏
  • 举报
回复
int Help(int a[], unsigned int n)
{
if(a == NULL)
{
return -1;
}

int tmp;
int count = 1;

for(int i = 0;i < n; i++)
{
if(a[i] == a[i+1])
{
tmp = a[i];
count++;
}
else
{
//如果大于3则打印
if(count > 2)
{
printf("Number is %d\ , %d times\n", tmp, count);
}
count = 1;
}

if(i == n -1)
{
//如果大于3则打印
if(count > 2)
{
printf("Number is %d\ , %d times\n", tmp, count);
}
}
}

return 0;
}
kangzuo 2007-02-05
  • 打赏
  • 举报
回复
楼上好象不对啊
好多数没找到
=========================
是现写的程序,没有测试过,知识思想行了。

细心看有个bug,修改一下:

int iNum, iTemp, iRe, iT1, iT2;
for(iNum=100000;iNum<1000000;iNum++)
{
iRe=0;
iTemp = iNum;
iT1 = iT2 = -1; //原来是iT1 = iT2 = 0;
while(1)
{
iT1 = iTemp % 10;
iTemp = iTemp / 10;
if(iTemp==0)break;
if(iT1==iT2)iRe++;
else iRe=0;
iT2 = iT1;
if(iRe>=2)printf("%d\r\n", iNum); //原来是iRe>2
}
}

jixingzhong 2007-02-05
  • 打赏
  • 举报
回复
程序直接判断也是可以的:

数据很多,
建议输出到文件中查看吧
(编译后得到 test.exe, dos下使用命令 test.exe>>test.txt 将结果输出到文件)

#include <stdio.h>
#include <stdlib.h>


int main()
{
long l=100000;
char tmp[8]={0};
char *check[]={"000","111","222","333","444","555","666"
,"777","888","999"};
for(; l<1000000; l++)
{
int i;
sprintf(tmp, "%ld", l);
for(i=0; i<10; i++)
if(strstr(tmp, check[i]) != NULL)
{
printf("%ld\t", l);
break;
}

}
system("PAUSE");
return 0;
}
kinsey0514 2007-02-05
  • 打赏
  • 举报
回复
楼上好象不对啊
好多数没找到
jixingzhong 2007-02-05
  • 打赏
  • 举报
回复
排列是比较快的办法,
将3个 0-9中的各个数值, 以及 任意一个 3联数(比如111、222等),如此四个元素进行排列即可,注意考虑一下首位不能为0 。
kangzuo 2007-02-05
  • 打赏
  • 举报
回复
直接组合出来不就可以了???靠,这样的东西也需要查找?
======================================================

对,直接组合效率更高,我怎么没想到
kangzuo 2007-02-05
  • 打赏
  • 举报
回复
int iNum, iTemp, iRe, iT1, iT2;
for(iNum=100000;iNum<1000000;iNum++)
{
iRe=0;
iTemp = iNum;
iT1 = iT2 = 0;
while(1)
{
iT1 = iTemp % 10;
iTemp = iTemp / 10;
if(iTemp==0)break;
if(iT1==iT2)iRe++;
else iRe=0;
iT2 = iT1;
if(iRe>2)printf("%d\r\n", iNum);
}
}
kinsey0514 2007-02-05
  • 打赏
  • 举报
回复
怎么组?
积木 2007-02-05
  • 打赏
  • 举报
回复
直接组合出来不就可以了???靠,这样的东西也需要查找?
bpttc 2007-02-05
  • 打赏
  • 举报
回复
一时粗心,写错一句,现在改正

#include <stdio.h>
#include <stdlib.h>

void main()
{
int iNum, iTemp, iLst, iRe;

for(iNum=100000; iNum<1000000; ++iNum)
{
iLst = iNum%10; //上面这处写错了
iRe = 0;
for(iTemp=iNum/10; iTemp>0; iTemp/=10)
{
if(iTemp%10 == iLst)
{
++iRe;
}
else
{
iRe = 0;
iLst = iTemp%10;
}

if(2 == iRe)
{
printf("%d\n", iNum);
system("pause");
break;
}
}
}
}
bpttc 2007-02-05
  • 打赏
  • 举报
回复
#include <stdio.h>

void main()
{
int iNum, iTemp, iLst, iRe;

for(iNum=100000; iNum<1000000; ++iNum)
{
iLst = iTemp%10;
iRe = 0;
for(iTemp=iNum/10; iTemp>0; iTemp/=10)
{
if(iTemp%10 == iLst)
{
++iRe;
}
else
{
iRe = 0;
iLst = iTemp%10;
}

if(2 == iRe)
{
printf("%d\n", iNum);
break;
}
}
}
}

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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