字符数组?直接桶排吧……O(n)已经很省时间了……
[bo]以下是引用 [un]StarWing83[/un] 在 2008-5-2 23:43 的发言:[/bo]
那道题是说缺一个数嘛……如果是1~n有且只有一对相同的话,和缺一个数字不是一样么……
那道题是说缺一个数嘛……如果是1~n有且只有一对相同的话,和缺一个数字不是一样么……
看清楚是什么时间复杂度
" border="0" />[color=white]
/*************************************************************************** 呵呵,终于把它作出来了,虽然简陋些,算法也很普通, 但终究是自己的作品,也达到了楼主的要求,也通俗易懂。 如有不对的地方,希望大家指出来,谢谢。 也不知道我的这个时间复杂度是多少呢? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 今天发生了很不好的事情,但对于我也许是种激励。因为虽然 听到了很偏激的声音,说明我平时做得很不好,有许多不足之处。 但也看到了许多支持我、鼓励我的朋友。 在此谢过众位了,对我有好感的,对我厌恶的。都谢谢了。 ***************************************************************************/ #include<stdio.h> #include<string.h> #define N 10000 void px(char a[],int n) { char c; int i,j; for(i=0;i<n;++i) for(j=i+1;j<n;++j) if(a[i]<a[j]) { c=a[i]; a[i]=a[j]; a[j]=c; } } int main(void) { char a[N];/*用于输入待检查的数据*/ int i,j,n,k; printf("下面输入数据,enter结束输入:\n"); gets(a); /*输入数据*/ n=strlen(a); px(a,n); /*排序*/ puts(a); for(i=0;i<n;++i) { k=0; for(j=i;j<n;++j) if(i!=j&&a[i]==a[j]) /*当遇到相同数据时*/ { ++i; ++k; } if(k>0) /*当k值大于0,说明有相同数据,并输出*/ printf("\n共有%d个相同的%c.\n",k+1,a[i]); } if(k==0) /* 当k值为0时,说明没有相同数据。*/ printf("没有相同的数据.\n"); system("pause"); return 0; }