时间限制:1 秒内存限制:32 兆特殊判题:否提交:10572解决:2540
题目描述:
输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。
输入:
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。
接下来的一行有N个整数。
输出:
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
样例输入:
4
1 3 4 2
样例输出:
4
1 2 3
提示:
如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。
冒泡排序的做法
#include<stdio.h>
void Bubblesort(int *a,int n)
{
int swap;
for(int i=1;i<=n-1;i++)
{
for(int j=n-1;j>=i;j--)
{
if(a[j]>a[j+1])
{
swap=a[j+1];
a[j+1]=a[j];
a[j]=swap;
}
}
}
}
int main()
{
int n;
int num[1001];
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
if(n==1)
{
printf("%d\n-1\n",num[1]);
continue;
}
Bubblesort(num,n);
printf("%d\n",num[n]);
for(int i=1;i<=n-2;i++)
printf("%d ",num[i]);
printf("%d\n",num[n-1]);
}
}
/**************************************************************
Problem: 1185
User: paomolvcha1
Language: C
Result: Accepted
Time:80 ms
Memory:912 kb
****************************************************************/
使用C语言标准库的快速排序qsort的方法
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int n;
int num[1001];
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
if(n==1)
{
printf("%d\n-1\n",num[1]);
continue;
}
qsort(num+1,n,sizeof(num[1]),cmp);
printf("%d\n",num[n]);
for(int i=1;i<=n-2;i++)
printf("%d ",num[i]);
printf("%d\n",num[n-1]);
}
}
/**************************************************************
Problem: 1185
User: paomolvcha1
Language: C
Result: Accepted
Time:30 ms
Memory:912 kb
****************************************************************/
使用C++ stl标准库排序算法的做法(推荐)
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
int buff[1024];
while(~scanf("%d",&n))
{
//input
for(int i=0;i<n;i++)
scanf("%d",&buff[i]);
//n=1
if(n==1)
{
printf("%d\n-1\n",buff[0]);
continue;
}
//n>=2
sort(buff,buff+n);
for(int i=0;i<n-2;i++)
printf("%d ",buff[i]);
printf("%d\n",buff[n-2]);
}
return 0;
}
/**************************************************************
Problem: 1185
User: paomolvcha1
Language: C++
Result: Wrong Answer
****************************************************************/
题目1023:EXCEL排序
时间限制:1 秒内存限制:32 兆特殊判题:否提交:10796解决:2513
题目描述:
Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
输入:
测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
输出:
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
样例输入:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0
样例输出:
Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
来源:
2007年浙江大学计算机及软件工程研究生机试真题
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;
class stu
{
public:
int id;
char name[256];
int score;
stu()
{
id=0;
name[0]='0';
score=0;
}
};
bool cmp_id(stu a,stu b)
{
return a.id<b.id;
}
bool cmp_name(stu a,stu b)
{
int tmp=strcmp(a.name,b.name);
if(tmp!=0)
return tmp<0;
else
return a.id<b.id;
}
bool cmp_score(stu a,stu b)
{
if(a.score!=b.score)
return a.score<b.score;
else
return a.id<b.id;
}
int main()
{
//freopen("a.txt","r",stdin);
int n,c;
vector<stu>buff;
int count=1;
while(~scanf("%d%d",&n,&c))
{
//input
buff.resize(n);
for(int i=0;i<n;i++)
scanf("%d %s %d",&buff[i].id,buff[i].name,&buff[i].score);
//n=0
if(n==0)
break;
//sort
if(c==1)
sort(buff.begin(),buff.begin()+n,cmp_id);
if(c==2)
sort(buff.begin(),buff.begin()+n,cmp_name);
if(c==3)
sort(buff.begin(),buff.begin()+n,cmp_score);
//output
printf("Case %d:\n",count++);
for(int i=0;i<n;i++)
printf("%06d %s %d\n",buff[i].id,buff[i].name,buff[i].score);
}
return 0;
}
/**************************************************************
Problem: 1023
User: paomolvcha1
Language: C++
Result: Accepted
Time:210 ms
Memory:9232 kb
****************************************************************/