博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1055. 集体照 (25)
阅读量:5132 次
发布时间:2019-06-13

本文共 2023 字,大约阅读时间需要 6 分钟。

原题:

思路: 先从大到小排序(名字相同的也考虑上), 然后分排分别遍历, 第一次要遍历

的人数需要加上剩余的人数, 也就最后一排所有的人数, 之后每排的人数都相等.

题目中说的先插左边后插右边, 不需要奇偶判断, 用if和elseif就行.

实现:

#include 
#include
#include
#define LEN 10010struct Class { char name[10]; int height;};typedef struct Class class;int compare (const void *a, const void *b);int main (void) { int zrs; // 总人数 int zps; // 总排数 int gprs; // 该排人数 int midpos; // 中间位置 class src[LEN]; // 下标0不用 class dest[LEN]; int i; scanf("%d %d", &zrs, &zps); for (i = 1; i <= zrs; i++) { scanf("%s %d", src[i].name, &src[i].height); } qsort(src + 1, zrs, sizeof(class), compare); int startpos = 1; // 开始位置 int j; int left; // 插入左边 int right; // 插入右边 int leftpos; // 左位置 int rightpos; // 右位置 for (i = 1; i <= zps; i++) { if (i == 1) { gprs = (zrs / zps) + (zrs % zps); } else { gprs = zrs / zps; } midpos = gprs / 2 + 1; dest[midpos] = src[startpos]; left = 1; right = 0; leftpos = midpos; rightpos = midpos; // 每次一段段的循环该排人数 // 把该排人的位置调整后放入 dest 中 for (j = startpos + 1; j <= startpos + gprs - 1; j++) { if (left == 1) { dest[--leftpos] = src[j]; left = 0; right = 1; } else if (right == 1) { dest[++rightpos] = src[j]; left = 1; right = 0; } } char ch = ' '; for (j = 1; j <= gprs; j++) { if (j == gprs) ch = '\n'; printf("%s%c", dest[j].name, ch); } startpos += gprs; } return 0;}int compare (const void *a, const void *b) { class arg1 = *(class*)a; class arg2 = *(class*)b; if (arg1.height != arg2.height) { return arg2.height - arg1.height; } else { return strcmp(arg1.name, arg2.name); }}

转载于:https://www.cnblogs.com/asheng2016/p/7873710.html

你可能感兴趣的文章
ZOJ3195 Design the city [2017年6月计划 树上问题04]
查看>>
Android之Json的学习
查看>>
复合过去式
查看>>
Delphi制作DLL
查看>>
PAT A1098 Insertion or Heap Sort (25 分)——堆排序和插入排序,未完待续。。
查看>>
How do you add?(递推)
查看>>
[super performSelector:sel]探秘
查看>>
最小生成树的算法
查看>>
lasso回归的原理
查看>>
一点对后缀自动机的理解 及模板
查看>>
EF架构学习第一章
查看>>
架构之美随笔四------最终用户应用架构
查看>>
小程序踩坑(三)-上拉加载和下拉刷新篇
查看>>
mysql backup
查看>>
《Pro Ogre 3D Programming》读书笔记 之 第十章 布告板与粒子 第二部分 (转)
查看>>
文件字符输入输出流
查看>>
sed——linux下对文本当控制操作(替换,追加)
查看>>
编程之美 set 7 求数组中的最长递增子序列
查看>>
vbscript获取本机的ip地址和mac地址
查看>>
int[]里数的个数怎么由输入决定?-----动态数组。
查看>>