/******************************************************************
个学生考完期末试评卷成后,老师需要划出及格线,求如下:
(1)及格线是 10 的倍数
(2)保证至少有60%的学生及格;
(3)如果所有的学生都高于60分,则及格线为 60 分
输入10个整数:取值0~100
输出及格分数线,10的倍数
**********************************************************************/
#include<stdio.h>
#include<stdlib.h>
int comp(const void* a, const void* b)
{
return *((int*)a) - *((int*)b);
}
int makesurePassLine(int* arr, int length)
{
if(arr ==NULL || length<=0)
return -1;
int result = -1;
qsort(arr,10,sizeof(int),comp);
for(int i=0; i<length; ++i)
{
printf("%d\t",arr[i]);
}
if(arr[0] > 60)
result = 60;
else if(arr[4]%10 == 0)
result = arr[4];
else
result = arr[4]/10*10;
return result;
}
void test()
{
const int length = 10;
int arr[10] ={61,51,49,30,20,10,70,80,90,99};
int passLine = makesurePassLine(arr,length);
printf("%d\n",passLine);
}
void test1()
{
const int length = 10;
int arr[10] ={61,70,89,70,80,90,80,80,90,99};
int passLine = makesurePassLine(arr,length);
printf("%d\n",passLine);
}
int main()
{
test();
test1();
return 0;
}
不足之处:改变了原来的输入数组,可通过辅助数组解决这个问题。