c语言医生值班题目讲解,C趣味程序百例(17)哪个大夫哪天值班
55.哪个大夫哪天值班
医院有A、B、C、D、E、F、G七位大夫,在一星期内(星期一至星期天)每人要轮流值班一天。现在已知:
A大夫比C大夫晚一天值班;
D大夫比E大夫晚二天值班;
B大夫比G大夫早三天值班;
F大夫的值班日在B和C大夫的中间,且是星期四;
请确定每天究竟是哪位大夫值班?
*问题分析与算法设计
由题目可推出如下已知条件:
*F是星期四值班;
*B值班的日期在星期一至星期三,且三天后是G值班;
*C值班的日期在星期五至星期六,且一天后是A值班;
*E两天后是D值班;E值班的日期只能在星期一至星期三;
在编程时用数组元素的下标1到7表示星期一到星期天,用数组元素的值分别表示A~F七位大夫。
*程序与程序注释
#include#includeint a[8];
char *day[]={"","MONDAY","TUESDAY","WEDNESDAY","THURSDAYT",
"FRIDAY","SATUDAY","SUNDAY"}; /*建 立星期表*/
void main()
{
int i,j,t;
a[4]=6; /*星期四是F值班*/
for(i=1;i<=3;i++)
{
a[i]=2; /*假设B值班的日期*/
if(!a[i+3]) a[i+3]=7; /*若三天后无人值班则安排G值班*/
else{ a[i]=0;continue;} /*否则B值班的日期不断对*/
for(t=1;t<=3;t++) /*假设E值班的时间*/
{
if(!a[t]) a[t]=5; /*若当天无人值班则安排E值班*/
else continue;
if(!a[t+2]) a[t+2]=4; /*若E值班两天后无人值班则应为D*/
else{ a[t]=0;continue;} /*否则E值班的日期不对*/
for(j=5;j<7;j++)
{
if(!a[j]) a[j]=3; /*若当天无人值班,则安排C值班*/
else continue;
if(!a[j+1]) a[j+1]=1; /*C之后一天无人值班则应当是A值班*/
else{ a[j]=0;continue;} /*否则A值班日期不对*/
for(i=1;i<=7;i++) /*安排完毕,输出结果*/
printf("Doctor %c is on duty %s.\n",’A’+a[i]-1,day[i]);
exit(0);
}
}
}
}
*运行结果
Doctor E is on duty MONDAY. (星期一:E)
Doctor B is on duty TUESDAY. (星期二:B)
Doctor D is on duty WEDNESDAY. (星期三:D)
Doctor F is on duty THUESDAY. (星期四:F)
Doctor G is on duty FRIDAY. (星期五:G)
Doctor C is on duty SATURDAY. (星期六:C)
Doctor A is on duty SUNDAY. (星期日:A)
*思考题
在本题的求解过程中,我们只考虑了一星期之内的情况,没有考虑跨周的情况。对于“B大夫比G大夫早三天值班的”条件只是简单的认为是在同一周内早三天。若考虑跨周的情况就可能出现:B大夫星期一值班,而G大夫是上周的星期五。同样,对“F大夫的值班日在B和C大夫的中间”这个条件,也可以扩展为:“只要F大夫的值班日在B和C大夫的中间就可以”。
请考虑允许跨周的情况下,可能的时间安排表。
C趣味程序百例(17)哪个大夫哪天值班.doc
下载Word文档到电脑,方便收藏和打印[全文共1440字]
编辑推荐:
下载Word文档
c语言医生值班题目讲解,C趣味程序百例(17)哪个大夫哪天值班相关推荐
- 谁在说谎c语言编译,C趣味程序百例(15)谁在说谎
50.谁在说谎 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎.现在问:这三人中到底谁说的是真话,谁说的是假话? *问题分析与算法设计 分析题目,每个人都有可能说的是真话,也有可能说的是 ...
- C语言编程验证卡布列克,C趣味程序百例(26)卡布列克常数
83.卡布列克常数 验证卡布列克运算.任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律: 1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的的四位数: 2)将组成该四位 ...
- c 语言趣味入门,Cc++趣味程序百例(献给CC++初学者).doc
Cc趣味程序百例(献给CC初学者) C/c++趣味程序百例(獻給C/C++初學者) 1.繪製餘弦曲線 2.繪製餘弦曲線和直線 3.繪製圓 4.歌星大獎賽 5.求最大數 6.高次方數的尾數 7.階乘尾數 ...
- 1到9组成3个3位数用C语言,C趣味程序百例(18)1~9分成1:2:3的三个3位数
60.1~9分成1:2:3的三个3位数 将1到9 这九个数字分成三个3位数,分求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍.问应当怎样分法. *问题分析与算法设计 问题中的三个数之间 ...
- 黑白子交换c语言思路,C趣味程序百例(28)黑白子交换
87.黑白子交换 有三个白子和三个黑子如下图布置: ○ ○ ○ . ● ● ● 游戏的目的是用最少的步数将上图中白子和黑子的位置进行交换: ● ● ● . ○ ○ ○ 游戏的规则是:(1)一次只能移动 ...
- c/c++ 趣味程序百例
C/c++趣味程序百例(献给C/C++初学者) C/c++趣味程序百例(献给C/C++初学者) 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 ...
- C语言趣味程序百例精解
1.绘制余弦曲线 在屏幕上用"*"显示0~360度的余弦函数cos(x)曲线 *问题分析与算法设计 如果在程序中使用数组,这个问题十分简单.但若规定不能使用数组,问题就变得不容易了 ...
- C/C++趣味程序百例
1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 7.阶乘尾数零的个数 8.借书方案知多少 9.杨辉三角形 10.数制转换 ...
- C语言编程验证卡布列克,C语言生趣程序百例精解之JAVA实现(83):卡布列克常数...
C语言趣味程序百例精解之JAVA实现(83):卡布列克常数 C语言趣味程序百例精解之JAVA实现: public class Test83{ public static void main(Strin ...
最新文章
- linux lnmp yum,yum安装LNMP
- IronRuby:元编程特性【method_missing】的使用
- windows下的sysprep
- 后台原理_从浏览器如何进入路由器后台【详细介绍】
- python调用api做用户登录认证_(二)Python调用Zabbix api之从入门到放弃——登录并获取身份验证令牌...
- MySQL(九)插入、更新和删除
- Mybatis缓存配置
- 动手造轮子:写一个日志框架
- 使用openssl完成aes-cbc模式的数据加解密,输入和输出都是字符串的形式
- 070——VUE中vuex之使用getters计算每一件购物车中商品的总价
- MicroNets:更小更快更好的MicroNet,三大CV任务都秒杀MobileNetV3
- bzoj4593: [Shoi2015]聚变反应炉
- matlab 常用函数或符号用法总结
- 想给视频去色并加马赛克就用它
- 免费下载百度文库需下载券文件
- Stata: 空间计量模型溢出效应的动态呈现
- JSP教程|1小时玩转JSP网站开发技术
- 短文本相似度计算-simHash从原理到实现
- SNAP 4. 使用snap进行地物光谱分析
- Kubernetes(K8S)入门到运维 ( 六) Helm与功能组件及证书年限