#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<string.h>
using namespace std;
#define inf 0x3f3f3f
int n;
int main()
{
int x[33],res,tt,cnt;
double ans;
bool vis[33];
while(scanf("%d",&n) != EOF)
{
for(int k = 1 ; k <= n ; k++)
scanf("%d",&x[k]);
for(int i = 1 ; i <= 100 ; i++)
{
memset(vis,0,sizeof(vis));
tt = 0;
for(int j = 0 ; j <= i ;j++)
{
ans = 1.0*j/i;
res = 100*ans +0.5;
for(int k = 1; k <= n ;k++)
{
if(vis[k] == 0 && x[k] == res)
{
vis[k] = 1;
tt++;
if(tt == n)
{
cnt = i;
break;
}
}
}
if(tt == n)break;
}
if(tt == n)break;
}
printf("%d\n",cnt);
}
return 0;
}
思路,队伍最多只有100个,那么可以遍历1-100的全部情况,如果当出现一个数可以满足所要求的正确率的话,就可以break了.这个就是最小的满足条件的队伍的数目
这里最开始把变量全部开在main函数外面错了。后来开在里面,正确了.还不明白为什么;
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<string.h>
using namespace std;
#define inf 0x3f3f3f
int n;
int main()
{
int x[33],res,tt,cnt;
double ans;
bool vis[33];
while(scanf("%d",&n) != EOF)
{
for(int k = 1 ; k <= n ; k++)
scanf("%d",&x[k]);
for(int i = 1 ; i <= 100 ; i++)
{
memset(vis,0,sizeof(vis));
tt = 0;
for(int j = 0 ; j <= i ;j++)
{
ans = 1.0*j/i;
res = 100*ans +0.5;
for(int k = 1; k <= n ;k++)
{
if(vis[k] == 0 && x[k] == res)
{
vis[k] = 1;
tt++;
if(tt == n)
{
cnt = i;
break;
}
}
}
if(tt == n)break;
}
if(tt == n)break;
}
printf("%d\n",cnt);
}
return 0;
}
思路,队伍最多只有100个,那么可以遍历1-100的全部情况,如果当出现一个数可以满足所要求的正确率的话,就可以break了.这个就是最小的满足条件的队伍的数目
这里最开始把变量全部开在main函数外面错了。后来开在里面,正确了.还不明白为什么;