1011: 最終得分
現在的大學生程序設計競賽的評分標準只有一個——是否正確。爲了吸引更多的學生參賽,組委會決定修改評分標準,從6個方面進行評分:正確,強壯,全面,清晰,編程風格和可維護。針對這6個得分,去掉一個最高分,去掉一個最低分,再取平均分作爲最終得分。有多組測試數據,每組測試數據由一行組成,用空格隔開6個整數(0<=grade<=10),表示6項得分。最後一行是6個0,表示結束,每組測試數據輸出一行,輸出最終得分(沒有多餘0或小數)。代碼:
#include<stdio.h>
int
a[6];
main()
{
int
b,s,i,j,m,k;
float
n;
while
(1)
{
for
(b=0;
b<=5; b++)
{
scanf
(
"%d"
,&a[b]);
}
if
(a[1]!=0||a[2]!=0||a[3]!=0||a[4]!=0||a[5]!=0||a[0]!=0)
{
for
(i=0;
i<5; i++)
{
for
(j=i+1;
j<=5; j++)
{
if
(a[i]<a[j])
{
s=a[i];
a[i]=a[j];
a[j]=s;
}
}
}
k=0;
for
(m=1;
m<=4; m++)
{
k+=a[m];
}n=k/4.0;
printf
(
"%g\n"
,n);
}
else
break
;
}}
解題思路:排序,去掉最大值,最小值,求平均;
重點:1,如果要求是不需要多餘0;不規定保留多少位小數,則定義float。然後%g輸出
2,若是多組數據輸入,可以用while(1){}結構;對數據有判斷在裏面定義;
罰站!
上體育課了,同學們參差不齊的站好了,體育老師一看傻眼了,學生這麼多,卻沒有按高矮順序站好,於是,老師決定了一個懲罰措施,在一共N個學生的隊列中,從第一個學生開始按順序選擇K個同學中身高最高的同學罰站(例如,第一次選擇從第1個到第K個同學中的最高個罰站,第二次選擇從第2個到第K+1個同學中的最高個罰站,……依次類推)。這位體育老師想請你編寫一個程序,求出每次懲罰的學生的身高。
輸入均爲整數。
第一行N,K。學生人數N∈[1,100000],K∈[1,100];
第二行是N個整數,代表N個同學各自的身高。
共一行,回車結尾。按要求輸出懲罰同學的身高。
#include<stdio.h>
int
f[100000];
main()
{
int
a,b,c,s,i,t,j,max;
{
scanf
(
"%d%d"
,&a,&b);
for
(c=0;c<=a-1;c++)
{
scanf
(
"%d"
,&f[c]);
}
t=a-b;
max=0;
for
(i=0;i<=t-1;i++)
{max=f[i];
for
(j=i+1;j<=i+b-1;j++)
{
if
(max<f[j])
{
max=f[j];
}
}
printf
(
"%d
"
,max);
}
for
(j=t;j<=i+b-1;j++)
{
if
(max<f[j])
{
max=f[j];
}
}
printf
(
"%d\n"
,max);}
}
解題思路:最主要就是利用兩個for循環;求最大值
重點:習慣去用這種方式來求最大值;
#include<stdio.h>
int
a[6];
main()
{
int
b,s,i,j,m,k;
float
n;
while
(1)
{
for
(b=0;
b<=5; b++)
{
scanf
(
"%d"
,&a[b]);
}
if
(a[1]!=0||a[2]!=0||a[3]!=0||a[4]!=0||a[5]!=0||a[0]!=0)
{
for
(i=0;
i<5; i++)
{
for
(j=i+1;
j<=5; j++)
{
if
(a[i]<a[j])
{
s=a[i];
a[i]=a[j];
a[j]=s;
}
}
}
k=0;
for
(m=1;
m<=4; m++)
{
k+=a[m];
}n=k/4.0;
printf
(
"%g\n"
,n);
}
else
break
;
}}
第一行N,K。學生人數N∈[1,100000],K∈[1,100];
第二行是N個整數,代表N個同學各自的身高。
#include<stdio.h>
int
f[100000];
main()
{
int
a,b,c,s,i,t,j,max;
{
scanf
(
"%d%d"
,&a,&b);
for
(c=0;c<=a-1;c++)
{
scanf
(
"%d"
,&f[c]);
}
t=a-b;
max=0;
for
(i=0;i<=t-1;i++)
{max=f[i];
for
(j=i+1;j<=i+b-1;j++)
{
if
(max<f[j])
{
max=f[j];
}
}
printf
(
"%d
"
,max);
}
for
(j=t;j<=i+b-1;j++)
{
if
(max<f[j])
{
max=f[j];
}
}
printf
(
"%d\n"
,max);}
}
解題思路:最主要就是利用兩個for循環;求最大值
重點:習慣去用這種方式來求最大值;