统计人数
发布时间: 2015年12月14日 15:36 最后更新: 2015年12月14日 17:59 时间限制: 1000ms 内存限制: 32M
HS想要统计镇上总共有多少人,但是他并不想一个一个的去数有多少个人,他想了一个其他的方法,他在镇上找了N个人,然后问每一个人“你知道 除你之外 镇上和你姓氏相同的人有多少个吗?”,现在HS想要知道,镇上最少有多少人?我们保证HS不会问同一个人两次。
第一行一个正整数T(T <= 100),表示T组测试样例; 每组样例有两行, 第一行一个正整数N(N <= 50),表示被问到的人数, 第二行N个数(在0 ~ 1000000之间),表示每个人的回答。
每行输出一个正整数,表示镇上最少人数。
复制
2 4 1 1 2 2 1 0
Case 1: 5 Case 2: 1
水题
找找规律就好了
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
int k,t,j,i,n,m,sum;
int a[100];
scanf("%d",&t);
for(j=1;j<=t;j++)
{
sum=0;
k=0;
m=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
if(n==1)
{
sum+=a[0];
sum++;
}
else
{
for(i=0;i<n;i++)
{
if(i==n-1)
{
if(a[i]==a[i-1])
{
k++;
}
else
{
sum+=a[i];
sum+=1;
}
sum+=(ceil(k*1.0/(m+1))*m);
sum+=ceil(k*1.0/(m+1));
}
else if(i==0)
{
m=a[i];
k=1;
}
else
{
if(a[i]==a[i-1])
{
k++;
}
else
{
sum+=(ceil(k*1.0/(m+1))*m);
sum+=ceil(k*1.0/(m+1));
m=a[i];
k=1;
}
}
}
}
printf("Case %d: %d\n",j,sum);
}
return 0;
}

8702

被折叠的 条评论
为什么被折叠?



