题目说明

人们聚集在某个活动会场上,根据到达会场的顺序排成一排等待入场。
假设你是活动的主办人员,想把人们从队列的某个位置分成两组。
求男性 20 人、女性 10 人的情况下,
有多少种到场顺序会导致无论怎么分组都没法实现任一组的男女人数均等?(原书表述有歧义,此处已修改)
即两组内的男女数量均不相同。

思路

如上图所示,
在10行20列的网格中,每一个交叉点的坐标都表示男、女的数量
x增加1,表示到一个男生;y增加1,表示到一个女生。
第一组:x和y相等的点标为"红点",
第二组:(20-x)和(10-y)相等的点也标记为"红点"
假设左下角原点为A点;右上角的点记为B点
则题目可以转化为:求从A点到B点的最短路径中,不经过"红点"的路线有多少条
也就是求解A点到B点在蓝色区域的最短路径的数量(所以人数多的一方要先到,也就是为啥x初始值为1)

代码

public static int count = 0; // 统计路线数量
public static void main(String[] args) {int x = 1; // 男生数量(人数多的那一方,必须是人数多的那一方先来,否则总能让第一组的男女人数相等)int y = 0; // 女生数量(人数少的那一方)int xMax = 20; // 男生数量上限int yMax = 10; // 女生数量上限move(x,y,xMax,yMax);System.out.println("count = " + count);
}
/*** 因为是最短路径,所以不能走回头路:即要么往上,要么往右。* @param x     当前男生的数量* @param y     当前女生的数量* @param xMax  男生数量上限* @param yMax  女生数量上限*/
public static void move(int x, int y, int xMax, int yMax){// 到达B点if(x == xMax && y == yMax){count ++; // 正确结果+1return ;}// 经过"红点",直接返回if(x == y || (xMax - x) == (yMax - y)){return ;}// 右移:来一个男生if(x < xMax){move(x+1,y,xMax,yMax);}// 上移:来一个女生if(y < yMax){move(x,y+1,xMax,yMax);}
}

结果

count = 2417416

程序员的算法趣题:Q09 落单的男女(Java版)相关推荐

  1. 程序员的算法趣题Q09: 落单的男女

    目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 思考 1. 问题描述 人们聚集在某个活动会场上,根据到场顺序排成一排等待入场,活动的主办人员,想把人们从队列的某个位置分成两组,想要让分开 ...

  2. php算法求出一个数可以被分解成多少个_程序员的算法趣题

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

  3. 程序员的算法趣题Q10: 轮盘的最大值

    目录 1. 问题描述 2. 解题分析 3. 代码及测试 1. 问题描述 轮盘游戏被称为"赌场女王".流传较广的轮盘数字排布和设计有"欧式规则"和"美式 ...

  4. 程序员的算法趣题 python3 - (5)

    注:以下题目来自<程序员的算法趣题>– [日]增井敏克著,原书解法主要用Ruby实现,最近在学Python,随便找点东西写写当做练习,准备改成Python3实现,顺便增加一些自己的理解. ...

  5. LeetBook《程序员的算法趣题》Q18---水果酥饼日

    <程序员的算法趣题>-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言. Q18 水果酥饼日   日本每月的 22 日是水果酥 ...

  6. 程序员的算法趣题Q50: 完美洗牌

    目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...

  7. 程序员的算法趣题Q55: 平分蛋糕

    目录 1. 问题描述 2. 解题分析 2.1 初始算法流程 2.2 优化 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 这个题目第一感就是动态规划. 对于(m, n)形状(如下图所示, ...

  8. 程序员的算法趣题Q67: 不挨着坐是一种礼节吗?

    目录 1. 问题描述 2. 解题分析 2.1 基本思路 2.2 动态规划 2.3 算法流程 3. 代码及测试 4. 后记 1. 问题描述 注意,本问题不区分人,只考虑各个座位被占用的不同顺序的个数. ...

  9. 程序员的算法趣题Q68: 异性相邻的座位安排(1)

    目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 后记 1. 问题描述 这道题的描述应该是有问题的(不知道是原文的问题还是翻译的问题). 前面的描述中提到"前后左右的座位全是异性 ...

  10. 程序员的算法趣题Q57: 最快的联络网

    目录 1. 问题描述 2. 解题分析 2.1 学生的状态 2.2 学生状态转移 Case-T1:Do nothing, just wait Case-T2:给处于S0状态的学生打电话 Case-T3: ...

最新文章

  1. Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用...
  2. ClickHouse【环境搭建 01】Linux环境单机版在线安装 Code:210.DB::NetException + Init script is already running 问题处理
  3. 企业需要的C++程序员
  4. 为什么金融分析需要应用python语言_python入门第一篇:python语言简介
  5. 织梦html2text( me),织梦dedecms中function='Html2Text(@me)的使用方法
  6. vsftp虚拟帐户配置
  7. 30 个惊艳的 Bootstrap 扩展插件
  8. 困难之下见证良心公司!!
  9. 6. URL (2)
  10. Android实现中英文切换
  11. Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全(带源码)
  12. Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
  13. 江南爱窗帘十大品牌,怎么合理的搭配窗帘配色
  14. python 基础知识点 (一)
  15. html搜索栏热搜效果,CSS3实战开发:百度新闻热搜词特效实战开发_html/css_WEB-ITnose...
  16. 2021届腾讯实习笔试题
  17. 苹果最无趣发布会上最有趣的五大亮点
  18. 2021昆明师大附中高考成绩查询,云南师大附中2021届高三年级第一次市统测优秀学生名单出炉!...
  19. Arch Linux 指南 02——安装图形界面
  20. [今日说法]联系方式

热门文章

  1. 原型模型| 软件工程
  2. 开源了个人开发的一个微信小程序,提供共享场景服务,支持图片和小视频
  3. L1-058 6翻了 (15 分)
  4. 计算机毕业设计JavaWeb企业客户管理系统(源码+系统+mysql数据库+lw文档)
  5. 【宏定义】#define 的使用方法
  6. 余光中《写给未来的你》
  7. linux灯控软件,Ubuntu下通过脚本控制键盘背光灯
  8. Vue CLI构建SPA项目教你手把手创建SPA项目
  9. 源支付3.1版本全开源版+店员监控软件+手机监控APP源码
  10. 黑马粉丝感叹:好可呀,好想要!!【最新福利你还没领?】