结构体操作—-

时间: 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;
}
				

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。