java逻辑

2012-02-27  邓智群 

本文说明一个java逻辑问题。

  100个人组成10*10的方队,横队称为行,纵队称为列。从每一行中挑出最高的一个人,共10人,再从这10个人中挑出最矮的一个人,记做甲;同时从每一列中挑出最矮的一个人,共10人,再从这十人中挑出最高的一个人,记做乙,甲和乙谁高,为什么

  ..一个貌似比较复杂的逻辑问题....

  原始方阵为person[ i ][ j ]

  则从该方阵中选出的每行最大值为max[ i ],从方阵中选出的每列最小值为min[ i ]。

  从max[ i ]中选出的最小值为 max_min(甲),它的属性是:大于等于任何与它在同一行的其他值

  从min[ i ]中选出的最大值为 min_max(乙),它的属性是:小于等于任何与它在同一列的其他值

  则可以得出以下结论:

  当甲和乙处于同一行或列时,甲>=乙

  当甲和乙是同一个人时,甲==乙

  当甲和乙处于不同行或列时,因为甲是大于等于任何与它在同一行中的值,又因为乙小于等于所在列的其余值,所以对应甲的行与对应乙的列相交的时候,交点必定满足 甲 >= 交点,乙 <=交点,合并得 甲 >= 交点 >= 乙,结果: 甲>=乙

  -----------------------------------------------------------------------

  关于甲和乙是同一个人的实例:

  9,8,7,6,5

  8,7,6,5,4

  7,6,5,4,3

  6,5,4,3,2

  5,4,3,2,1

  max = { 9,8,7,6,5 }

  min={ 5,4,3,2,1 }

  则max_min = 5(甲), min_max = 5(乙) 甲=乙,且在列阵里表示的是同一个人。
351°/3511 人阅读/0 条评论 发表评论

登录 后发表评论