ACM程序设计之马拉松竞赛
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:1026 测试通过:228
总提交:1026 测试通过:228
描述
校ACM协会近四个月举行了为期100天ACM程序设计之马拉松竞赛,竞赛题总数为1000,同学们反响热烈,先后有许多ACM程序设计竞赛爱好者报名,这些选手按报名时间从1开始先后编号,成功解答的题目数为选手的成绩。
今天进行成绩统计和颁奖仪式,已知按编号排序的选手成绩(各不相同),根据给定标准成绩将这些选手划为两个部分,小于标准成绩的选手不能获得任何奖项,大于等于标准成绩的选手将得到嘉奖,并依成绩从低到高上台领奖。
输入
共三行:
第一行给出选手人数(不超过1000);
第二行依编号从低到高给出选手成绩;
第三行给出标准成绩。
输出
共两行:
第一行给出根据标准成绩划分后的选手成绩,小于标准成绩的部分、大于等于标准成绩的部分内部均保持原有的先后顺序。
第二行给出依上台领奖次序排好的获奖选手成绩(没有任何选手上台领奖时,输出空行)。
样例输入
5
230 10 1000 500 399
500
样例输出
230 10 399 1000 500
500 1000
题目来源
南京邮电大学计算机学院首届ACM程序设计大赛
分析:一口老血
题目很清楚,每行结尾输出不带空格。排序出了个小错,怎么找都找不出来。。。
终于解决了,好吧,我彻底败了。
#include<stdio.h>
//ACM程序设计之马拉松竞赛
int main()
{
int n, a[1000], divide;
int prize[1000], num = 0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",÷);
for(int i=0;i<n;i++)
{
if(a[i] >= divide)
{
prize[num++] = a[i];
}
}
if(num > 0)
{
for(int i=0;i<n;i++)
{
if(a[i] < divide)
{
printf("%d ",a[i]);
}
}
for(int i=0;i<num-1;i++)
printf("%d ",prize[i]);
printf("%d\n",prize[num-1]);
for(int i=0;i<num-1;i++)
{
for(int j=i+1;j<num;j++)
{
if(prize[i] > prize[j])
{
int tmp = prize[i];
prize[i] = prize[j];
prize[j] = tmp;
}
}
}
for(int i=0;i<num-1;i++)
printf("%d ",prize[i]);
printf("%d\n",prize[num-1]);
}
else
{
for(int i=0;i<n-1;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[n-1]);
printf("\n");
}
return 0;
}