网站上的文章用秀米可以做吗,电子商务平台信息系统建设,经验范围 网站建设,wordpress企业模板购买1055. 集体照 (25) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue拍集体照时队形很重要#xff0c;这里对给定的N个人K排的队形设计排队规则如下#xff1a; 每排人数为N/K#xff08;向下取整#xff09;#xff0c;多出来的人全部站在… 1055. 集体照 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 拍集体照时队形很重要这里对给定的N个人K排的队形设计排队规则如下 每排人数为N/K向下取整多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间中间位置为m/21其中m为该排人数除法向下取整 每排其他人以中间人为轴按身高非增序先右后左交替入队站在中间人的两侧例如5人身高为190、188、186、175、170则队形为175、188、190、186、170。这里假设你面对拍照者所以你的左边是中间人的右边 若多人身高相同则按名字的字典序升序排列。这里保证无重名。 现给定一组拍照人请编写程序输出他们的队形。 输入格式 每个输入包含1个测试用例。每个测试用例第1行给出两个正整数N10000总人数和K10总排数。随后N行每行给出一个人的名字不包含空格、长度不超过8个英文字母和身高[30, 300]区间内的整数。 输出格式 输出拍照的队形。即K排人名其间以空格分隔行末不得有多余空格。注意假设你面对拍照者后排的人输出在上方前排输出在下方。 输入样例 10 3
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159输出样例 Bob Tom Joe Nick
Ann Mike Eva
Tim Amy John 解题方案:
1,把N个输入存到内存中,并按身高排序,对于身高相等的人,再按字母字典排序,这道题一定要把题目读清楚,红字部分就是本题的关键,按照这个方法输出就没有错误,本题还是比较好的,因为处理的时候比较麻烦.
代码: /************************************************************************* File Name: 1055.c Author: YueBo Mail: yuebowhu163.com Created Time: Sat 10 Jun 2017 07:07:14 PM CST************************************************************************/#include stdio.h
#include stdlib.h
#include string.hstruct list
{char name[16];int hight;
};
//用于排序函数qsort,这里参用综合排序,即综合身高和姓名,可以保证排序的唯一性
int cmp(const void *a, const void *b)
{int hight_dist, name_dist;hight_dist ((struct list *)b)-hight - ((struct list *)a)-hight;name_dist strcmp(((struct list *)a)-name, ((struct list *)b)-name);return hight_dist ! 0 ? hight_dist : name_dist;
}
//把每一排的人输出
void arr(struct list *info_list, int start, int len)
{int loopi;int mid, left, right;char **row_name (char **)malloc(len * sizeof(char *));mid len / 2;left mid - 1;right mid 1;loopi 0;row_name[mid] info_list[startloopi].name;loopi;while (loopi len){if (left 0){row_name[left--] info_list[startloopi].name;loopi;}if (right len){row_name[right] info_list[startloopi].name;loopi;}}for (loopi 0; loopi len; loopi)printf(%s%s, row_name[loopi], loopi len-1 ? : );printf(\n);free(row_name);
}int main()
{int N, K, i, row;int top -1;int start;scanf(%d%d, N, K);row N / K;struct list *info_list (struct list *)malloc(N*sizeof(struct list));for (i 0; i N; i)scanf(%s%d, (info_listi)-name, ((info_listi)-hight));qsort(info_list, N, sizeof(struct list), cmp);arr(info_list, 0, N-(K-1)*row);start N - (K - 1) * row;for (i 0; i K-1; i){arr(info_list, start, row);start row;}return 0;
}