关闭

[华为机试真题][2015]65.和尚挑水

标签: 华为机试真题
2410人阅读 评论(1) 收藏 举报
分类:

题目

某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:
和尚1: 星期二,四;
和尚2: 星期一,六;
和尚3: 星期三,日;
和尚4: 星期五;
和尚5: 星期一,四,六;
和尚6: 星期二,五;
和尚7: 星期三,六,日;
请将所有合理的挑水时间安排表 

思路 回朔法求解

回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解。扩大时,首先检查扩大后是否违反了约束条件,若不违反,则扩大之,然后继续在此基础上按照类似的方法进行,直至成为完整解;若违反,则放弃该步以及它所能生成的部分解,然后按照类似的方法尝试其他可能的扩大方式,直到尝试了所有的扩大方式。

请输入和尚1的空闲时间:0 1 0 1 0 0 0
请输入和尚2的空闲时间:1 0 0 0 0 1 0
请输入和尚3的空闲时间:0 0 1 0 0 0 1
请输入和尚4的空闲时间:0 0 0 0 1 0 0
请输入和尚5的空闲时间:1 0 0 1 0 1 0
请输入和尚6的空闲时间:0 1 0 0 1 0 0
请输入和尚7的空闲时间:0 0 1 0 0 1 1

代码

/*---------------------------------------
*   日期:2015-07-06
*   作者:SJF0115
*   题目:和尚挑水
*   来源:华为机试真题
-----------------------------------------*/
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

void DrawingWater(vector<vector<int> > &spare,int index,int &count,vector<int> &week,vector<bool> &visited){
    int i;
    if(index == 7){
        ++count;
        cout<<"方案"<<count<<endl;
        for(i = 0; i < 7;++i){
            cout<<"星期"<<i+1<<"   和尚"<<week[i]+1<<"   挑水"<<endl;
        }//for
        cout<<endl;
        return;
    }//if
    for(i = 0;i < 7;++i){
        week[index] = i;
        // 判断和尚j是否已经挑过水及和尚星期n是否有空
        if(!visited[i] && spare[i][index] == 1){
                visited[i] = true;
                DrawingWater(spare,index+1,count,week,visited);
                visited[i] = false;
        }//if
    }//for
}

int main(){
    vector<vector<int> > spare(7,vector<int>(7,0));
    //freopen("C:\\Users\\Administrator\\Desktop\\acm.txt","r",stdin);
    for(int i = 0;i < 7;++i){
        // 初始化和尚的空闲时间
        for(int j = 0;j < 7;++j){
            cin>>spare[i][j];
        }//for
    }//for
    int count = 0;
    vector<int> week(7,0);
    vector<bool> visited(7,false);
    DrawingWater(spare,0,count,week,visited);
    cout<<"总共"<<count<<"种方案"<<endl;
    return 0;
}
2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

[华为机试真题][2015]65.和尚挑水

题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,...
  • SunnyYoona
  • SunnyYoona
  • 2015-07-06 20:52
  • 2410

2016华为软件精英挑战赛:赛题及其答疑汇总

前言 赛题源自“未来网络”业务发放中的路由计算问题。算路问题属于基础算法问题,在图论、网络、交通等各个方面均有着广泛的研究与运用,里面不乏一些经典的算法,例如最短路中的广度优先搜索,Dijkstra算...
  • EbowTang
  • EbowTang
  • 2016-03-08 09:55
  • 16003

2015年系统架构师考试题详解

考试科目一:综合知识某航空公司机票销售系统有n个售票点,该系统为每个售票点创建一个进程Pi(i=1,2,…,n)管理机票销售。假设Tj(j=1,2,…,m)单元存放某日某航班的机票剩余票数,Temp为...
  • bingoxubin
  • bingoxubin
  • 2017-11-03 10:41
  • 156439

华为2016实习生招聘笔试题第三题--和尚挑水

【问题描述】和尚挑水 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期...
  • u014787301
  • u014787301
  • 2016-04-21 17:55
  • 550

[华为机试真题]72.操作系统任务调度问题

题目操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 系统任务的优先级 = 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 现有一任务队列task[],长...
  • SunnyYoona
  • SunnyYoona
  • 2015-07-07 21:57
  • 1412

[华为机试真题]66.单词搜索

题目代码/*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * ...
  • SunnyYoona
  • SunnyYoona
  • 2015-07-06 21:54
  • 1498

[华为机试真题][2014]64.实现两个合法时间相加

题目描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果;注意,相加后的结果也必需是一个合法的时间; 附合法时间定义:小时在[00-23...
  • SunnyYoona
  • SunnyYoona
  • 2015-07-06 15:28
  • 1561

2014华为机试真题(2)

1.数字是否存在相同部分         求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。...
  • qianhen123
  • qianhen123
  • 2015-08-14 22:01
  • 1198

2014华为机试真题(1)

1.及格线问题 10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数; (2) 保证至少有60%的学生及格; (3) 如果所有的学生都高于60分,则及格线为6...
  • qianhen123
  • qianhen123
  • 2015-08-10 22:57
  • 604

华为和尚挑水问题(转化)

某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; ...
  • u012940548
  • u012940548
  • 2015-09-14 20:33
  • 451
    个人资料
    • 访问:1446927次
    • 积分:21908
    • 等级:
    • 排名:第385名
    • 原创:624篇
    • 转载:133篇
    • 译文:60篇
    • 评论:187条
    博客专栏
    文章分类
    最新评论