结构体操作----
时间: 1ms 内存:128M
描述:
定义一个结构体,其中包含两个整形变量value、i。现要求将输入的结构体按照value升序排序,并且输出前k个的i值。
输入:
第一行有两个整数n和k,n代表结构体的个数。
从第2--n+1行,每行有两个整数,分别为value和i。
(0<n<=100,0<k<=n)
输出:
输出结构体按照value升序排序后的前k个 i 值。
(输出占一行,每两个数之间有一个空格,行结尾没有空格!)
示例输入:
3 3
10 0
1 2
100 -1
示例输出:
2 0 -1
提示:
参考答案(内存最优[1116]):
#include<stdio.h>
struct node
{
int value;
int i;
};
int main()
{
int k,i,n,j,p;
struct node u[1000];
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
scanf("%d%d",&u[i].value,&u[i].i);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(u[i].value>u[j].value){
p=u[i].value;
u[i].value=u[j].value;
u[j].value=p;
p=u[i].i;
u[i].i=u[j].i;
u[j].i=p;
}
for(i=0;i<k-1;i++)
printf("%d ",u[i].i);
printf("%d\n",u[i].i);
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
struct node
{
int value;
int i;
};
int main()
{
int k,i,n,j,p;
struct node u[1000];
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
scanf("%d%d",&u[i].value,&u[i].i);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(u[i].value>u[j].value){
p=u[i].value;
u[i].value=u[j].value;
u[j].value=p;
p=u[i].i;
u[i].i=u[j].i;
u[j].i=p;
}
for(i=0;i<k-1;i++)
printf("%d ",u[i].i);
printf("%d\n",u[i].i);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。