【演算法精練】歌星大獎賽及擴充套件
阿新 • • 發佈:2018-12-18
歌星大獎賽
要求:在歌星大獎賽中,有10個評委為參賽選手打分,分數為1到100分。選手最後得分為:去掉一個最高分,去掉一個最低分,最終得分為8個分數的平均分。請編寫C/C++程式實現。
演算法設計:這個問題的演算法十分簡單,但要注意在程式中判斷最大、最小值的變數是如何賦初值的。
原始碼及註釋:
#include <stdio.h>
#include <Windows.h>
int main()
{
int integer;
int i = 0;
int max = INT_MIN; //注意max與min的初值,假定兩個極值,
int min = INT_MAX; // 賦初值時注意賦予兩個值域之外的值
int sum = 0;
int Average = 0;
for(i = 1;i <= 10;i++)
{
printf("Please enter judges %i:",i);
scanf("%d",&integer);
sum += integer; //累加求和
if(integer > max)
max = integer; //最高分
if(integer < min)
min = integer; //最低分
}
printf("max = %d , min = %d\n",max,min);
printf ("Average sorce: %d\n",(sum - max - min)/8);
system("pause");
return 0 ;
}
思考題(擴充套件)
要求:題目條件不變,但考慮同時對評委的評分進行裁判,記載10個評委中找到最高分(即評分最接近平均分)和最不公平(即與平均分差距最大)的評委,程式應該如何實現?
演算法設計:在原先的基礎上,要對之前資料進行判斷,因此首先應該儲存之前的資料,這裡用陣列來儲存成績。通過平均分與成績之間的差值儲存在另一個數組中,求出最大值和最小值即可。
原始碼及註釋:
#include <stdio.h>
#include <Windows.h>
int main()
{
int integer[10] = {0}; //評委判定成績
int temp[10] = {0}; //與平均分的差值
int i = 0;
int max = -1; //注意max與min的初值,假定兩個極值
int min = 101;
int sum = 0;
int Average = 0;
int judges1 = 0;
int judges2 = 0;
for(i = 1;i <= 10;i++)
{
printf("Please enter judges %i:",i);
scanf("%d",&integer[i]);
sum += integer[i];
if(integer[i] > max)
max = integer[i]; //最高分
if(integer[i] < min)
min = integer[i]; //最低分
}
printf("去除一個最高分:%d , 去除一個最低分:%d 最終得分為:%d\n",max,min,(sum-max-min)/8);
Average = (sum - max - min)/8;
min = 101;
max = -1;
for(i = 1;i <= 10;i++)
{
temp[i] = Average - integer[i];
temp[i] = temp[i] > 0?temp[i]:(-temp[i]);//將平均分與成績差值的絕對值儲存
if(temp[i] != 0 && (temp[i] > max))
{
max = temp[i]; //差值的最大值
judges1 = i;
}
if(temp[i] != 0 && (temp[i] < min))
{
min = temp[i];
judges2 = i; //差值的最小值
}
}
printf("最公平的裁判是:judges%d,評分為:%d\n最不公平的裁判是:judges%d,評分為:%d\n",judges2,integer[judges2],judges1,integer[judges1]);
system("pause");
return 0 ;
}