很久没有刷题了,刚刚有小学弟问了这道题,AC之后贴上来吧。水~~~
#include <cstdio>
#include <cmath>
int main() {
int n;
while(scanf("%d", &n) != EOF) {
int a = 0, b = 0, c = 0, d = 0;
int arr[100001];
for (int i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
if(arr[i] == 1) {
a++;
} else if(arr[i] == 2) {
b++;
} else if(arr[i] == 3) {
c++;
} else {
d++;
}
}
int sum = d + c;
a = (a > c) ? (a - c) : 0;
sum += b / 2;
if (b % 2) {
a = (a > 2) ? (a - 2) : 0;
sum++;
}
sum += a / 4;
if(a % 4) {
sum++;
}
printf("%d\n", sum);
}
return 0;
}
再贴一下小学弟的,看这代码膝盖也是一阵疼.......
#include <stdio.h>
#include <string.h>
int main()
{
int i,f[100001],n;
while(scanf("%d",&n)!=EOF)
{
int a=0,b=0,c=0,d=0;
for(i=0;i<n;i++)
{
scanf("%d",&f[i]);
if(f[i]==1) d++;
else if(f[i]==2) c++;
else if(f[i]==3) b++;
else a++;
}
if(b>=d)
{
c==0? printf("%d",a+b):printf("%d",a+b+(c-1)/2+1);
}
else
{
if((d-b)%2==0)
{
if((d-b)/2>c)
{
printf("%d",a+b+c+((d-b)/2-c-1)/2+1);
}
else if((d-b)/2==c)
{
printf("%d",a+b+c);
}
else
{
printf("%d",a+b+(d-b)/2+(c-(d-b)/2-1)/2+1);
}
}
else
{
if((c+(d-b)/2)%2==0)
{
printf("%d",a+b+(c+(d-b)/2)/2+1);
}
else
{
printf("%d",a+b+(c+(d-b)/2+1)/2);
}
}
}
printf("\n");
}
return 0;
}