高矮比较问题求解

来源:百度知道 编辑:UC知道 时间:2024/06/07 18:25:34
题目描述:200个学生不按身高任意排成10行、20列的长方形队列。在每一列中选出一个最矮者(如果最矮的人有几个,可任选其中一个)。然后在所选的20个矮人中挑出最高者一人,叫做“矮人中的高个子”。然后,令这20个矮人各回原位。再在每一行中选出一个最高者(如果最高的人有几个,可任选其中一个),又从这10个高人中挑出最矮者一人,叫“高个子中的矮子”。请问:“矮人中的高个子”和“高个子中的矮子”这二人中哪个高?
基本要求:(1)根据题目描述编程实现问题求解,可实现任意身高和任意排列;
(2)注意数据结构的选择,实物演示时要求讲出程序原理;
提高要求:(1)有较好的图形用户界面和较先进的排序算法;
(2)能通过界面将答案显示出来。
设计提示:用临时变量分别记录“矮人中的高个子”和“高个子中的矮子”,然后进行比较。
(用C或C++都可以)

将它们排序(假设为正序),那么前20人中有一个为矮人中的高个子,后20人中为高个子中的矮子,然后将这两个人比较,如果不想改变原来的顺序,可以将排序过程在另一个数组中进行

使用编译器为gcc-3.4.5,编译通过(建议复制到编辑器里看):
int main(){
//初始化
int low_in_high,high_in_low;//low_in_high:高个子中的矮人,high_in_low:矮人中的高个子
int i,m,n,height[10][20],save[40];//height:保存身高的数组,save:运算数组
int random=900;
//我不可能手动输入400次
for(i=0;i<=9;i++)
for(m=0;m<=19;m++)
height[i][m]=random--;
for(i=0;i<=19;i++)
save[i]=900;
for(i=20;i<=39;i++)
save[i]=0;

//找矮人
for(m=0,n=0;m<=19;m++,n++)
for(i=0;i<=9;i++)
if(save[n]>height[i][m]) save[n]=height[i][m];
//找高个子
for(m=0,n=39;m<=19;m++,n--)
for(i=0;i<=9;i++)
if(save[n]<height[i][m]) save[n]=height[i][m];

high_in_low=save[0];
low_in_high=save[39];
//找矮人中的高个子
for(i=0;i<=19;i++)
if(high_in_low<save[i]) high_in_low=save[i];
//找高个子中的矮人
for(i=20;i<=39;i+