最近看到了伯乐在线编程挑战赛,觉得题目还比较适中,而且出发点非常好,至少对我这种菜鸟来说。首先,他不排名,其次还公布大家提交的源码,如果不会的话,可以参考别人的代码。并且可以学习高手们的思路和编码风格,对自己有非常大的帮助。以后我会一直坚持跟进他的题目。

  今天把第0期的呼叫转移系统的题目看了下,第一次自己写的时候,没把情况考虑全。后来参考了别人的思路,最终把它给弄出来了。

要解决的就两个问题:

  1)当天设置了多少个呼叫转移
  2)最长的呼叫转移是多长次 ( A君转到B君,B君再转到C君。这个是2次呼叫转移)

  第一个问题很好解决,只需判断要求的那天是否在某个人的假期里,在的话,总数++就OK了。

  对于第二个问题,我的思路是遍历每个人,然后判断每个在假期里的人在那天总共要转移多少次,即找到他在那天要转移到哪个号码上,被转移到的那个好吗还是在假期,那么再递归求下一个,最后就能得到总的转移次数。再比较得出最大的那个即可。

  如果要判断是否存在环路的话,那么只要在求最大转移次数的时候,记录下初始号码,然后再每次查找下一个号码的时候判断一下是否跟初始号码相同,如果相同的话就存在环路。我在程序里面就没有实现这一步了,因为题目的输入假设是不存在环路的。

下面是我的代码实现:

//伯乐在线编程  第一期 呼叫转移系统
#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct
{char szSrcNum[5];char szDstNum[5];int nStartDay;int nPeriod;
}PERSON;PERSON *p;
int nPerson;  //总人数
int nDay;  //计算天数int onHoliday(PERSON *p);  //判断是否在度假
int totalCount(); //求当天呼叫转移的总次数
int Depth();
int Calc(char *s);
int Match(char *s);int main()
{int i,n = 0;int nMax = 0; //最长的呼叫转移次数int nCount = 0; //呼叫转移总次数FILE *fp;fp = fopen("in.txt","r");if (fp == NULL){printf("FOPEN ERROR\n");return 0;}fscanf(fp,"%d",&nPerson);p = (PERSON *)malloc(nPerson * sizeof(PERSON));if (p == NULL){printf("MALLOC ERROR\n");return 0;}while (n < nPerson){fscanf(fp,"%s%s%d%d",(p+n)->szSrcNum,(p+n)->szDstNum,&(p+n)->nStartDay,&(p+n)->nPeriod);n++;}fscanf(fp,"%d",&nDay);for (i = 0; i < nPerson; i++){printf("Person %d: %s %s %d %d.\n",i,(p+i)->szSrcNum,(p+i)->szDstNum,(p+i)->nStartDay,(p+i)->nPeriod);}nCount = totalCount();nMax = Depth();printf("第 %d 天共有 %d 个呼叫转移设置\n",nDay,nCount);printf("第 %d 天最长的呼叫转移是 %d 次\n",nDay,nMax);  free(p);return 0;
}int onHoliday(PERSON *p)
{int tmp = p->nStartDay + p->nPeriod - 1;if (p->nStartDay < nDay && tmp >= nDay) return 1;if (p->nStartDay == nDay) return 1;return -1;
}int totalCount()
{int i,nCount = 0;for (i = 0; i < nPerson; i++){if (1 == onHoliday(p+i)) nCount++;}return nCount;
}int Depth()
{  //求最大的呼叫转移次数int i,nRet,nMax = 0;for (i = 0; i < nPerson; i++){if (1 == onHoliday(p+i)){nRet = Calc((p+i)->szDstNum);}nMax = nMax > nRet ? nMax : nRet;}return nMax;
}int Calc(char *s)
{int nRet;if ((nRet = Match(s)) > 0)  {return Calc((p+nRet)->szDstNum) + 1;}else return 1 ;
}int Match(char *s)
{int i;for (i = 0; i < nPerson; i++){if (0 == strcmp((p+i)->szSrcNum,s) &&   //找到目的地址并且也在度假1 == onHoliday(p+i)){return i;}}return 0;
}

2013/6/16 16:02

转载于:https://www.cnblogs.com/Jason-Damon/p/3139032.html

在线做题---呼叫转移系统相关推荐

  1. php 实现答题计时,JavaScript实现学生在线做题计时器功能

    最近在项目中实现了一个学生在线做题的功能,其中需要记录学生的答题时间,所以就在前台写了个计时器 效果如下: HTML部分: 答题计时: readonly="readonly" id ...

  2. python 判断是不是汉字危机阅读答案_汉字危机_现代文阅读题在线测试(附答案)_高三语文_在线做题网...

    汉字危机 _ 现代文阅读题在线测试(附答案) _ 高三语文 _ 在线做题网 汉字危机 王小峰 中国的书写交流进入键盘划时代只有十几年, 任何一个初次接触电脑的人通过简单的学 习都能迅速掌握文字输入. ...

  3. 几个有名的在线做题系统(ACM OJ)

    1. 浙江大学 Online Judge(ZOJ) http://acm.zju.edu.cn      国内最早也是最有名气的OJ,有很多高手在上面做题.特点是数据比较刁钻,经常会有你想不到的边界数 ...

  4. 全国计算机在线做题,2020全国一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...

    &nbsp&nbsp[导读]:2020全国一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题),更多全国等级考试报名时间.考试时间以及考试模拟试题,请访问 ...

  5. 在线做题测试的软件,可以实现线上答题竞赛的工具哪个实用

    企业做培训考试.教师给学生做练习测试.单位举办知识答题竞赛,我们都可以选择采取线上答题竞赛的模式,既方便又省事,还节省成本,实在的再好不过的方式了. 我们要实现线上答题竞赛,可以用什么工具呢?什么样的 ...

  6. 全国计算机在线做题,全国计算机等级考试一级题库.docx

    全国计算机等级考试一级题库 全国计算机等级考试一级题库 一选择题: 1.微型计算机硬件系统中最核心的部件是( ).答 案:B A .主板 B. CPU C.内存储器 D. I/O 设备 2.下列术语中 ...

  7. 计算机Word2010在线做题,计算机WORD题库及答案.doc

    Word考试题及答案 一.单选题 1.在Word 2003主窗口呈最大化显示时,该窗口的右上角可以同时显示的按钮是_____按钮. A:最小化.还原.最大化 B:还原.最大化和关闭 C:最小化.还原和 ...

  8. 计算机试题能在手机上做吗,万题库pc_万题库为什么只能用手机版的而不能用电脑做题_淘题吧...

    1. 证券从业万题库有网页版或电脑版吗 您好,网校有证券从业机考模拟系统可以点我昵称在线做题哦. 2. 电脑可以安装注册造价师万题库吗 可以用手机安装"正保题库"海量习题手机端随时 ...

  9. 2021消防设施操作员(中级)岗位考试模拟题库保养系统知识部分

    [百分百题库]提供消防设施操作员考试试题.消防员考试预测题.消防设施操作员考试真题.消防员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关. 单选题 火灾探测报警产品使用寿命一般不超过( ...

  10. 在线判题系统hustoj的搭建

    摘要:ACM/ICPC程序设计竞赛,越来越受到各个高校的重视,是程序设计竞赛中的奥林匹克.Hustoj是搭建在linux系统上的判题系统.能够判断代码的正确性.会及时返回通过或者不通过,如果不通过会返 ...

最新文章

  1. AngularJS 1.x 国际化——Angular-translate例子
  2. 一周一论文(翻译)——[SIGMOD 2015] TIMELY RTT-based Congestion Control for the Datacenter
  3. eclipse 的help没有Eclipse Marketplace
  4. Java JDBC中,MySQL字段类型到JAVA类型的转换
  5. javascript --- [FormData的使用] 文件上传进度条展示 文件上传图片即使预览
  6. cell操作-matlab
  7. 整理C# 二进制,十进制,十六进制 互转
  8. 联通辟谣“不支持华为 5G”;罗永浩称索尼手机不如锤子;Linux 5.2.1 发布 | 极客头条...
  9. 怎么做应力应变曲线_常用的应力测试方法及其在船舶系统零部件中的应用
  10. 110个oracle常用函数总结(7),oracle110个最常用函数
  11. 史上最全惠普打印机PPD文件
  12. 方程求全微分结果和法向量、切向量的关系
  13. python树莓派3控制蜂鸣器_树莓派用蜂鸣器实现整点报时
  14. 【游记】CSP2021-试手记
  15. 比尔盖茨的风流情史,妻子同意他与前女友同居,婚内出轨损失 80 亿
  16. LaTeX记录 —— 特殊符号
  17. 基于stm32及LM041L的对角棋游戏
  18. 怀揣感恩之心,学会感恩
  19. Hibernate入门6.Hibernate检索方式
  20. mysql建表语句非空约束默认_Navicat mysql 建表字段 默认值 空白、NULL 、empty string的区别...

热门文章

  1. 参考文献引用详细教程
  2. 细说共模干扰和差模干扰(四个腿的电感是什么?有什么作用?)
  3. nginx 多php项目配置文件,nginx,_nginx配置多目录访问,nginx - phpStudy
  4. 华为薪酬(2002年左右)
  5. 那些年京东出现的BUG损失惨重,你还敢瞧不起测试?
  6. Improved Zero-shot Neural Machine Translation via Ignoring Spurious Correlations
  7. yolov7训练自己的数据集
  8. RESTFUL API 安全设计指南
  9. 异常值离群点检测算法---箱线图四分位检测
  10. 特殊日历计算 —— C++