天天看點

從考試成績中劃出及格線

/******************************************************************
個學生考完期末試評卷成後,老師需要劃出及格線,求如下:
(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;
}
           

不足之處:改變了原來的輸入數組,可通過輔助數組解決這個問題。

繼續閱讀