某公司收到了若干人员的信息,该信息是通过互联网以数据流的方式发过来的。这个数据流里全部是整数。每个人员信息的格式固定为三部分,第一部分为一个整数,代表这个人的编号,第二个部分也是一个整数,代表后边信息的长度n,即这个人的信息包含多少个整数。第三部分为n个整数,即这个人的信息。由于操作人员疏忽,这些人的信息并没有排序,现请你写一个函数将所有人员信息按编号排序并依次输出。
输入:共两行,第一行为一个整数n,代表信息流的总长度, 第二行为n个用空格分隔的整数,代表全部信息。
输出:若干行,每行为一个人员的信息。依次为编号,信息长度,及剩余全部信息,各个整数之间用一个空格分隔,行末无空格。具体见样例。
测试用例保证合法,且人员总数不超过1000。
函数接口定义:
void sortAndOutput(int *data , int size) ;
其中?data ?和?size ?都是用户传入的参数。?data ?为指向数据流数组的指针;?size ?是数据流内整数的个数,该数小于500000。函数没有返回值。
裁判测试程序样例:
#include<stdio.h>
#define MAXLEN 500000
void sortAndOutput(int *data , int size) ;
int main()
{
int data[MAXLEN];
int n, i;
scanf( "%d" , &n );
for ( i = 0 ; i < n ; i++ )
scanf( "%d" , &data[i] );
sortAndOutput( data, n ) ;
return 0;
}
/* 请在这里填写答案 */
输入样例:
20
3 5 1 2 3 4 5 1 6 11 12 13 14 15 16 2 3 100 100 100
输出样例:
1 6 11 12 13 14 15 16
2 3 100 100 100
3 5 1 2 3 4 5
?函数:(初学代码写的有些麻烦了,有更简洁的方法欢迎分享呀~有错误也欢迎指正~)
void sortAndOutput(int *data, int size) {
int i = 0, j = 1;
int flag = 0;
int count = 0;//用来判断是否已经输出了所有组的数据
while (1) {
for (j = 1; count != size; j++) {
flag = 0;
int *p = data;//每次p都指向data的首地址,遍历data
while (flag != 1) {
if (*p != j) {//如果不是顺序的下一组数据的编号
int k = *(p + 1);
for (i = 0; i <= k + 1; i++) {
p++;//移动指针跳过
}
} else if (*p == j) {//如果是顺序下一组数据的编号
int k = *(p + 1);
count = count + k + 2;
for (i = 0; i <= k + 1; i++) {//打印
if (i != k + 1)
printf("%d ", *p++);
else if (i == k + 1)
printf("%d\n", *p++);
}
flag = 1;//结束本轮的遍历,j++
}
}
}
}
}
|