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循环;求最大值
重点:习惯去用这种方式来求最大值;