字符数组?直接桶排吧……O(n)已经很省时间了……
[bo]以下是引用 [un]StarWing83[/un] 在 2008-5-2 23:43 的发言:[/bo]
那道题是说缺一个数嘛……如果是1~n有且只有一对相同的话,和缺一个数字不是一样么……
那道题是说缺一个数嘛……如果是1~n有且只有一对相同的话,和缺一个数字不是一样么……
看清楚是什么时间复杂度
程序代码:
/***************************************************************************
呵呵,终于把它作出来了,虽然简陋些,算法也很普通,
但终究是自己的作品,也达到了楼主的要求,也通俗易懂。
如有不对的地方,希望大家指出来,谢谢。
也不知道我的这个时间复杂度是多少呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
今天发生了很不好的事情,但对于我也许是种激励。因为虽然
听到了很偏激的声音,说明我平时做得很不好,有许多不足之处。
但也看到了许多支持我、鼓励我的朋友。
在此谢过众位了,对我有好感的,对我厌恶的。都谢谢了。
***************************************************************************/
#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;
}