[土狗之路]coursera C语言进阶练习题 排队游戏
2016-02-02 21:06
351 查看
直接上题:
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
在幼儿园中,老师安排小朋友做一个排队的游戏。首先老师精心的把数目相同的小男孩和小女孩编排在一个队列中,每个小孩按其在队列中的位置发给一个编号(编 号从0开始)。然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前后相邻的小男孩小女孩手拉 手离开队列游戏,如此往复。由于教师精心的安排,恰好可以保证每两个小朋友都能手拉手离开队列,并且最后离开的两个小朋友是编号最小的和最大的两个小朋 友。(注:只有小男孩在前,小女孩在后,且他们两之间没有其他的小朋友,他们才能手拉手离开队列)。请根据老师的排队,按小女孩编号从小到大的顺序,给出
所有手拉手离开队列的小男孩和小女孩的编号对。
用一个字符串代表小朋友队列。字符串中只会出现两个字符(样例输入里用的是 括号但实际数据则不一定),分别代表小男孩和小女孩,首先出现的字符代表小男孩,另一个字符代表小女孩。小孩总数不超过100
按小女孩编号顺序,顺序输出手拉手离开队列的小男孩和小女孩的编号对,每行一对编号,编号之间用一个空格分隔。
编程题#3:排队游戏
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
在幼儿园中,老师安排小朋友做一个排队的游戏。首先老师精心的把数目相同的小男孩和小女孩编排在一个队列中,每个小孩按其在队列中的位置发给一个编号(编 号从0开始)。然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前后相邻的小男孩小女孩手拉 手离开队列游戏,如此往复。由于教师精心的安排,恰好可以保证每两个小朋友都能手拉手离开队列,并且最后离开的两个小朋友是编号最小的和最大的两个小朋 友。(注:只有小男孩在前,小女孩在后,且他们两之间没有其他的小朋友,他们才能手拉手离开队列)。请根据老师的排队,按小女孩编号从小到大的顺序,给出所有手拉手离开队列的小男孩和小女孩的编号对。
输入
用一个字符串代表小朋友队列。字符串中只会出现两个字符(样例输入里用的是 括号但实际数据则不一定),分别代表小男孩和小女孩,首先出现的字符代表小男孩,另一个字符代表小女孩。小孩总数不超过100
输出
按小女孩编号顺序,顺序输出手拉手离开队列的小男孩和小女孩的编号对,每行一对编号,编号之间用一个空格分隔。
样例输入
((()(())())(()))
样例输出
2 3 5 6 4 7 8 9 1 10 12 13 11 14 0 15
#include<iostream> using namespace std; char children[101]; int boy = 0;//记录男生的数目 int couple = 0;//记录狗男女的数目 char m, f;//男,女 int date() {//函数名叫yue pao 。。。 for (int i = 0; i < 2 * boy; i++) { bool stay = true; if (children[i] == m) { for (int j = i + 1; j < 2 * boy; j++) { if (children[j] == m) break;//不考虑男同问题,所以这里break,先让后面的继续 if (children[j] == f) { children[i] = ' '; children[j] = ' '; cout << i <<' '<< j << endl; couple++; stay = false;//约到了,就不用在这浪费时间了,所以把位子清空,可以嘿嘿嘿去了。。。。 break; } } } if (stay == false) break;//有人约到就跳出这层循环 } if (couple != boy)//因为只考虑异性恋,所以如果情侣数目跟男生数目不相等,就证明还有男的是单身狗,所以继续递归 date(); return 0; } int main(){ cin.getline(children, 101); m = children[0];//根据题意,无论第一个人长什么样,我们都把他当男的看 for (int i = 0; i < 100; i++) { if (children[i] != m) { f = children[i];//不考虑有第三种性别的存在,所以长得跟男的不一样的,一律视为女的 break; } } for (int i = 0; i < 100; i++) { if (children[i] == m) boy++;//数数有多少个男生 } date(); return 0; }
相关文章推荐
- C语言求斐波拉切数列第n项
- 一起talk C栗子吧(第一百一十九回:C语言实例--线程死锁三)
- 小蚂蚁学习C语言(38)——题目——求字符串是否回文
- (C++) 分隔符匹配
- C++ Primer 笔记(一)cin输入的一些用法和注意事项(未完成)
- 设计模式C++实现:管理者模式
- asm基础——asm函数和c++函数之间的相互调用
- sqlite3对数据库加密用c语言开源项目wxSQLite3实现
- 用C++ Builder实现一组数组的排序与插入操作
- C++引用计数(reference counting)技术简介(3)
- C++引用计数(reference counting)技术简介(3)
- 学习C++
- C/C++: Inline function, calloc vs malloc
- C/C++: Inline function, calloc vs malloc
- C/C++: Inline function, calloc vs malloc
- C/C++: Inline function, calloc vs malloc
- C/C++: Inline function, calloc vs malloc
- C/C++: Inline function, calloc vs malloc
- ||C||<基础>C语言基础知识框架结构//个人整理使用|仅供参考|
- 基础知识(十)C++常用函数.txt