[cpp]伯乐在线编程挑战第 0 期 – 呼叫转移系统
题目:
描述
呼叫转移服务是一个把呼叫号码A转移到号码B的服务。举个例子:当你正在度假时,这样的系统非常有帮助。A君度假去了,那么,A君的工作电话可以通 过呼叫转移至B君。更进一步讲,当B君也正好在度假,还可以继续 通过呼叫转移到C君,依次类推。也就是说,当一个客户打电话到A君,通过呼叫转移系统,最 后转接到了C君。
本期的编程挑战是要实现一个和呼叫转移系统相关的逻辑。根据个人的度假时间安排和呼叫转移设置,返回呼叫转移的个数和“深度”。
输入
第一行给出一个整数N,代表从第二行开始有多少个度假安排。
每个度假安排为单独一行,其中包括4个数字:第一个数字是被叫人的4位数电话号码,第二个数字是呼叫转移至的4位数电话号码, 第三个数字是起始时间 ( 用天数计算),最后一个数字是度假时间的有效期(用天数计 算)。
最后一行是开始日期。
请注意:
1) 这里的时间日期是基于天数顺序。1代表第一天,2代表第二天,依次类推。这里没有月份和年这样的时间单位,统一用天数来作为度假的日期安排。(天数最高是32位无符号整数的最大值)
2) 输入的呼叫转移不会出现环路。如描述中所举例, A君转到B君,B君再转到C君。但C君不会转到A君。对于有环路的输入,检测并提示输入环路错误,这点不作要求。当然,如果你的程序可以检测这种环路,并提示错 误, 当然更好。
3)不能同时从一个号码转移到多个号码。如描述中所举例, A君转到B君,A君不能同时又转移到C君。
输出
基于开始度假的日期 (输入数据的最后一行), 你的程序必须打印输出2行信息。
1)当天设置了多少个呼叫转移
2)当天最长的呼叫转移是多长次 ( A君转到B君,B君再转到C君。这个是2次呼叫转移)
示例
(请注意:这个仅仅是示例数据,它们是为了方便大家理解题目而添加的,你的代码不能仅解析这5行示例数据)
1. 输入示例
|
1
2
3
4
5
|
30000 0001 1 30001 4964 2 14964 0005 2 32 |
2. 输出示例
|
1
2
|
第 2 天共有 3 个呼叫转移设置第 2 天最长的呼叫转移是 3 次 |
//第 2 天为什么有 3 个呼叫转移?如果你没有看懂,这里解释一下: “ 0000 0001 1 3 ”
这个是3天有效,所以,第二天这个呼叫转移还有效。“0001 4964 2 1” 和 “4964 0005 2 3“
都是第二天设置的,有效期分别是 1和3天。所以,第 2 天共有 3 个呼叫转移设置。
分析:
同样懒得想最优算法了,直接暴力法解决之。
代码:
#include <iostream>
#include <fstream>
using namespace std; int main(){
fstream fin("bole0.txt");
int numbers=;
fin>>numbers;
int plan[numbers][];
//fromCall,toCall,fromDay,toDay的含义应该比较明显,就是数据文件每一行的每个数据
int fromCall,toCall,fromDay,toDay=;
for(int i=;i<numbers;i++){
fin>>fromCall>>toCall>>fromDay>>toDay;
plan[i][]=fromCall;
plan[i][]=toCall;
plan[i][]=fromDay;
plan[i][]=toDay;
//plan[i][4]表示这个转移的连接次数,默认为1,也即是它自己。
plan[i][]=;
}
int currentDay=;
fin>>currentDay;
int currentDayTransNumbers=;
for(int i=;i<numbers;i++){
//判断
if(plan[i][]<=currentDay && plan[i][]+plan[i][]>=currentDay)
currentDayTransNumbers++;
}
cout<<"第"<<currentDay<<"天共有"<<currentDayTransNumbers<<"个呼叫转移设置"<<endl;
bool flagForMergeChanged=false;
while(flagForMergeChanged==false){
for(int i=;i<numbers;i++){
for(int j=;j<numbers;j++){
//暴力方法对比
if(i!=j){
if(plan[i][]==plan[j][]){
plan[i][]=plan[j][];
plan[i][]++;
flagForMergeChanged=true;
if(plan[i][]==plan[])
//这时候出现了闭环!
cout<<"警告!闭环出现!"<<endl;
}
}
}
}
if(flagForMergeChanged==false){
break;
}
}
//找最长的呼叫转移
int longestCallTranDays=;
for(int i=;i<numbers;i++){
longestCallTranDays=(longestCallTranDays<plan[i][])?plan[i][]:longestCallTranDays;
}
cout<<"第"<<currentDay<<"天最长的呼叫转移是"<<longestCallTranDays<<"次"<<endl;
}
总结:
可能是第0期的原因,总体来说比较简单,写起来很快。另外,把闭环的检测也加上了。
看到有些选手确实写得很好,至少代码行数就很少,不过也有行数比我多好多的,哈哈。
挑战结束之后,我会将本期最受欢迎的代码贴在这里,大家可以讨论下。敬请期待~
欢迎您的讨论!
[cpp]伯乐在线编程挑战第 0 期 – 呼叫转移系统的更多相关文章
- Robotutor Scratch3.0 在线编程平台升级啦!
Robotutor推出的Scratch3.0在线编程平台受到很多编程老师和学员的喜爱,上一个版本我们提供了用户注册,找回密码,个人项目的在线保存和浏览,社区分享评论. 我们根据实际的教学需要,用户角色 ...
- Robotutor Scratch3.0 在线编程平台上线!
终于,Scratch3.0在线编程平台上线了,不容易阿! 欢迎试用 https://scratch.robotutor.cn 欢迎交流,WeChat ID: iamlinweidong
- Open XML SDK 在线编程黑客松
2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...
- [转]微软联合CSDN英雄在线编程大赛
2014 新年将至,微软联合CSDN英雄会共同举办本次第三届在线编程大赛,题目详情如下: 有一个字符串"iinbinbing",截取不同位置的字符‘b’.‘i’.‘n’.‘g’组合 ...
- 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)
第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...
- 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)
第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...
- [ios-必看] 国人当自强:两岸三地在线编程学习网站大搜罗 [转]
http://blog.csdn.net/lyy_whg/article/details/17350923 说到国内的在线编程学习网站,很多人都是一脸茫然,即使是资深开发者也是如此.在许多人眼中,尽管 ...
- w3c编程挑战-初级脚本算法
之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流! 1.翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序 ...
- 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
原文出处: 平凡之路的博客 欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...
随机推荐
- Php5.3的lambda函数以及closure(闭包)
从php5.3以后,php也可以使用lambda function(可能你会觉得是匿名函数,的确是但不仅仅是)来写类似javascript风格的代码: $myFunc = function() { e ...
- 线程间使用socket通信的计算器
该程序是处理平时的算数运算,程序也没有什么特别之处,只是将所有运算分开运算,每个函数(线程)处理不同的运算符号里面的运算,然后将所有结果都汇总到main函数中进行最后汇总(相加减)运算,每个函数内都处 ...
- 中标麒麟6.0_ICE3.4.2编译+demo测试(CPP)
(菜鸟版)确保 gcc版本4.4.6(其他版本未测试),4.8不行 一.降级GCC到4.4.6 注意:gcc g++ c++命令都为4.4.6(可用gcc -v; g++ -v; c++ -v 命令查 ...
- scss + react + webpack + es6
scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...
- 查看linux版本的三种常用方法
1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如: [root@3.5.5Biz-46 ~]# lsb_release -a LSB Version: 1.3 Dis ...
- 一款C++静态分析工具 —— CppDepend
Wrote by mutouyun. (http://darkc.at/cppdepend/) 去年6月份的时候,CppDepend的一位技术社区经理(technical community mana ...
- 解决android开发webservice的发布与数据库连接的问题
由于app后续开发的需要,移植了两次webservice和数据库,遇到了不少问题,也花费了很多时间,实践告诉我要学会寻找问题的根源,这样才能在开发中节省时间,尽快解决问题!好,废话不多说,转入正题…… ...
- Linux下的经常使用性能查询命令top、vmstat、gprof、pidstat之对照
(1)查看各个CPU核的使用情况 sudo top -d 1 进入之后,按1,会出现以下的CPU使用情况,当中us列反映了各个CPU核的使用情况,百分比大说明该核在进行紧张的任务. (2)查看哪个进程 ...
- objective-c 中代码块(blocks)
在ios4之后,引入了代码块的特性,在gcd中会经常的用到,所以决定好好的看看代码块文档,把这块总结一下.从头开始讲解代码块. 1.声明和使用代码块 一般用^操作符声明一个块变量,并作为块的开始符.而 ...
- sql server group by having 之复习篇
where 与 having 之间的差别在于where 是分组前的过滤,而having是分组后的过滤 Group By中Select指定的字段限制 示例3 select 类别, sum(数量) as ...