Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345474
  • 博文数量: 88
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-21 14:50
文章分类

全部博文(88)

文章存档

2010年(88)

我的朋友

分类: C/C++

2010-09-20 13:53:51

题目来自《编程之美》
这里自己写了下寻找一个最多的ID和寻找2个最多的ID的情况,注意条件(一个最多的ID发帖量必须超过总帖的1/2,2个最多的ID发帖量各自都超过总帖数的1/3 才能用如下的方法解答)

扩展题目可以按照代码思路类推。
代码可以直接运行。
/*
 * Description:
 *           寻找发帖最多的1个(2个)ID。
 * Author  :FinL
 * Language: C
 * Date    : 2010-09-20
 */

#include

int candidate;
int candidate1;
int candidate2;

/*其中有一个人的帖子超过了一半*/
int find(int *a,int n)
{
int i,ntimes;
for(i=ntimes=0;i
{
if(0==ntimes)
{
candidate=a[i];
ntimes=1;
}
else
{
if(a[i]==candidate)
ntimes++;
else
ntimes--;
}
}
return candidate;
}

/*其中有2个人的帖子各超过了1/3*/
void find2(int *a,int n)
{
int i,ntimes1=0,ntimes2=0;
for(i=0;i
{
if(0==ntimes1)
{
candidate1=a[i];
ntimes1=1;
}
else
{
if(a[i]==candidate1)
{
ntimes1++;
}
else
{
if(0==ntimes2)
{
candidate2=a[i];
ntimes2=1;
}
else
{
if(a[i]==candidate2)
{
ntimes2++;
}
else
{
ntimes1--;
ntimes2--;
}
}
}
}
}
}


int main()
{
int a[]={1,1,1,1,2,2,2,2,3,3};
int n;
// int candidate;

n=sizeof(a)/sizeof(a[0]);
// candidate=find(a,n);
find2(a,n);

printf("candidate is %d,%d\n",candidate1,candidate2);
return 0;

}
阅读(1002) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~