某程要开习题课,由于教室座位有限,所以决定限制参加人数。于是规定:1、最多允许一半的班级里的同学参加;2、可以参加的班级最多允许一半的同学参加。现请你写一段程序来计算习题课最多可能有多少个学生参加。
输入格式:
为两行,第一行为一个整数n(0<n<100),代表班级的个数,第二行为n个正整数,分别代表每个班级的人数。
输出格式:
只有一行,为能够参加习题课的人数的最大值。(当数字为奇数时,一半指的是该数减一后除以2,测试用例保证所有整数可以用 int 类型存储)。
样例">样例">样例">样例">样例">样例">样例">样例">样例">样例">样例">输入样例:
5
4 5 6 7 8
输出样例:
7
MY IDEAS"
1.要求最大人数,首先对人数进行排序吧,如果班级数是奇数,mid=(n+1)/2,如果是奇数,mid=n/2,再进行累加求和。
2.冒泡排序:
for (loc=n-1;loc!=0;loc--)
{
for (i=0;i<=loc-1;i++)
if (class[i]>class[i+1])
{
temp=class[i];
class[i]=class[i+1];
class[i+1]=temp;
}
1 2 3 4 5
2 3 4 5 1
3 4 5 2 1
loc是冒泡的次数(元素数-1),内循环对i,从第一个开始,到loc-1,进行比较,然后交换,交换时要注意用temp保存数。
3.分奇数偶数累加,最后输出就好。
#include <stdio.h>
int main ()
{
int n,i,loc,temp,mid,sum=0;
scanf ("%d",&n);
int class[n];
for (i=0;i<n;i++)
{
scanf ("%d",&class[i]);
}
//用冒泡法hhh
for (loc=n-1;loc!=0;loc--)
{
for (i=0;i<=loc-1;i++)
if (class[i]>class[i+1])
{
temp=class[i];
class[i]=class[i+1];
class[i+1]=temp;
}
}
if (n%2==0) mid=n/2;
else mid=(n+1)/2;
for (i=mid;i<n;i++)
{
if (class[i]%2!=0) sum += (class[i]-1)/2;
else sum += class[i]/2;
}
printf ("%d\n",sum);
return 0;
}