好久没来了,问个简单的问题

advancejar 2006-08-06 11:12:58
11223344
123455678

1.有N行数字,长度不定,我取其中一行(这个就当完成了),
然后判断这行数字(假如说是:11223344)包含的不同数字有几个?应该是4个
如果是123455678则是8个数字

先问这个,以后还有其他问题,呵呵

由于涉及到处理内容很多,所以想寻找最优的算法,谢谢
...全文
222 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj860603 2006-08-07
  • 打赏
  • 举报
回复
刚我也只想到先排序然后再计数。

看了xddzccn(一个人旅行)的代码,算法太漂亮了! ^_^
du51 2006-08-07
  • 打赏
  • 举报
回复
unique
size
cunsh 2006-08-07
  • 打赏
  • 举报
回复
用c++stl的set呀
chenhu_doc 2006-08-07
  • 打赏
  • 举报
回复
先排序,再计数!
xddzccn 2006-08-07
  • 打赏
  • 举报
回复

小弟不懂算法,写了一个自己想的,不知道什么叫做算法的复杂度,请指教!
谢谢!
main()
{
int a[10]={0};

int i;

int n=0;

char ch_a[80];

printf("please input a number");

gets(ch_a);

for(i=0; i<strlen(ch_a); i++)
{

ch_a[i]=ch_a[i]-'0';

a[ch_a[i]]++;

}

for(i=0;i<10;i++)
{

if(a[i]!=0)n++;

}

printf("the number is %d",n);

}
advancejar 2006-08-07
  • 打赏
  • 举报
回复
数字第一个不为0,其他数字可以是0
数字是不排序的,乱序.
jixingzhong 2006-08-07
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main()
{
int num=12345678;
char str[20];
int n[10]={0}, i, count=0;

sprintf(str, "%d", num);
for(i=0; i<strlen(str); i++)
{
n[ str[i]-'0' ]++;
if( n[ str[i]-'0' ] == 1 )
count++;
}
printf("There are %d different numbers in the num %d\n\n", count, num);
system("PAUSE");
return 0;
}
fflush 2006-08-06
  • 打赏
  • 举报
回复
你取出来的数字是排序的吗,如果是的,直接遍历一次就可以找到有几个不同的数字;如果不是排序的,比较快的办法是用一个辅助数组Count[10]来对数字0-9来进行计数,那么,计数值不为0的数字的个数就是不同的数字的个数

以上两种情况的时间复杂度都是O(M),M为一行中元素的个数

69,371

社区成员

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

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