news 2026/6/10 17:22:16

UVa 139 Telephone Tangles

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 139 Telephone Tangles

题目分析

本题是一道电话计费模拟题,要求根据拨打的号码和通话时长,结合给定的区号(或国家代码)与费率表,计算出每一通电话的费用。

输入格式

输入分为两部分:

  1. 费率表
    每行格式为:

    代码 地区名称$每分钟费用(美分)

    地区名称不超过252525个字符,费率以美分为单位。
    此部分以一行000000结束。

  2. 通话记录
    每行格式为:

    号码 时长(分钟)

    号码与时长之间至少有一个空格。
    此部分以一行#结束。

号码分类

  • 国际长途(IDD\texttt{IDD}IDD:以00开头,后接111333位国家代码,再后接444101010位用户号码。
  • 国内长途(STD\texttt{STD}STD:以0开头(但非00),后接111555位区号,再后接444777位用户号码。
  • 本地通话:不以0开头,免费。
  • 无效号码:若号码以000开头,但未在费率表中找到匹配的代码,或用户号码长度不符合规定,则视为Unknown,费用为−1.00-1.001.00

输出格式

输出每行包含:

  • 拨打的号码(左对齐,宽度161616
  • 地区名称
  • 用户号码
  • 通话时长(右对齐,宽度555
  • 每分钟费用(右对齐,宽度666,保留两位小数)
  • 总费用(右对齐,宽度777,保留两位小数)

若为未知号码,则每分钟费用处留空。


解题思路

步骤分解

  1. 解析费率表
    将每行的代码、地区名称、费率分别提取出来,存储在一个结构体数组中。

  2. 处理通话记录
    对每条记录:

    • 提取号码和时长。
    • 根据号码前缀判断类型:
      • 若以00开头,尝试匹配国际代码。
      • 若以0开头(非00),尝试匹配国内区号。
      • 否则为本地通话。
    • 匹配时需检查用户号码长度是否符合规定。
    • 若未匹配成功,则为Unknown
  3. 计算费用
    费率以美分存储,计算时需除以100.0100.0100.0转换为美元。

  4. 格式化输出
    使用cout的格式化输出功能(如setwsetprecision)控制对齐与精度。

关键点

  • 匹配代码时使用find判断前缀是否一致。
  • 用户号码长度需在匹配后验证。
  • 输出格式需严格对齐,包括空格数量。

代码实现

// Telephone Tangles// UVa ID: 139// Verdict: Accepted// Submission Date: 2016-01-19// UVa Run Time: 0.085s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;structprice{string code;string area;intcost;};intmain(){string line;vector<price>prices;// 处理第一部分输入while(getline(cin,line),line.find("000000")!=0){string code,area,fee;intindex=0;while(index<line.length()&&isdigit(line[index]))code+=line[index++];// 跳过空格,直到 $ 都属于国家或地区名称index++;while(index<line.length()&&line[index]!='$')area+=line[index++];// 跳过 $index++;while(index<line.length()){if(isdigit(line[index]))fee+=line[index];index++;}// cout << code << " " << area << " " << fee << endl;prices.push_back((price){code,area,stoi(fee)});}// 处理第二部分输入并输出while(getline(cin,line),line!="#"){intindex=0;string calledNumber,duration;while(index<line.length()&&isdigit(line[index]))calledNumber+=line[index++];while(index<line.length()&&isblank(line[index]))index++;while(index<line.length()&&isdigit(line[index]))duration+=line[index++];string area,subscriber;doublecost,totalCost;boolunknown=true;for(inti=0;i<prices.size();i++){if(calledNumber.find(prices[i].code)==0){area=prices[i].area;subscriber=calledNumber.substr(prices[i].code.length());if(calledNumber.find("00")==0){if(subscriber.length()<4||subscriber.length()>10)continue;}elseif(calledNumber.find("0")==0){if(subscriber.length()<4||subscriber.length()>7)continue;}cost=prices[i].cost/100.00;totalCost=stoi(duration)*cost;unknown=false;break;}}if(unknown){if(calledNumber.find("00")==0||calledNumber.find("0")==0){area="Unknown";subscriber.clear();totalCost=-1.0;}else{area="Local";subscriber=calledNumber;cost=0.00;totalCost=0.0;unknown=false;}}cout.setf(ios::fixed);cout<<setw(16)<<left<<calledNumber;cout<<area;cout<<string(35-area.length()-subscriber.length(),' ');cout<<subscriber;cout<<setw(5)<<right<<duration;if(unknown)cout<<string(6,' ');elsecout<<setw(6)<<right<<setprecision(2)<<cost;cout<<setw(7)<<right<<setprecision(2)<<totalCost;cout<<endl;}return0;}

总结

本题主要考察字符串处理格式化输出能力,同时需要注意细节处理(如号码长度验证、费用单位转换)。通过合理设计数据结构并逐步匹配,即可正确计算并输出每通电话的费用。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 7:05:42

深入解析Scikit-learn模型API:超越基础用法的高级实践

深入解析Scikit-learn模型API&#xff1a;超越基础用法的高级实践 引言&#xff1a;为何需要深入理解Scikit-learn API&#xff1f; Scikit-learn作为Python机器学习领域的事实标准库&#xff0c;其简洁统一的API设计备受赞誉。大多数开发者熟悉基础的fit()、predict()、tran…

作者头像 李华
网站建设 2026/6/5 8:50:05

2026短视频爆梗音效大全:10个免费素材网站推荐

根据《2025中国短视频内容生态发展报告》显示&#xff0c;短视频内容中音效的使用频率同比提升了35%&#xff0c;优质的爆梗音效能让视频的用户互动率提高28%。对于短视频创作者来说&#xff0c;找到免费又热门的爆梗音效是提升内容质量的关键一步。接下来&#xff0c;我们就来…

作者头像 李华
网站建设 2026/6/10 4:16:40

免费音效素材打包下载避坑:2026年10个靠谱网站推荐

根据《2025中国数字创意产业发展报告》显示&#xff0c;2025年国内数字创意产业规模突破6万亿元&#xff0c;其中音效素材的年需求量同比增长35%。然而&#xff0c;报告同时指出&#xff0c;免费音效素材的版权纠纷案件也上升了22%。很多创作者在寻找免费音效素材打包下载资源时…

作者头像 李华
网站建设 2026/6/9 23:14:08

【CDA干货】客户分群建模——RFM+K-Means用户画像——电商用户数据分析全流程:从数据到增长决策

客户分群建模——RFMK-Means用户画像 1. 业务背景 运用机器学习技术&#xff0c;基于电商用户的行为及交易数据开展客户分群研究。其核心目标在于识别出差异化的客户群体&#xff0c;为企业制定精准营销、产品推荐及客户留存策略提供决策依据。 对1万笔抽样电商交易进行了结…

作者头像 李华
网站建设 2026/6/10 15:59:51

SGMICRO圣邦微 SGM3157YC6/TR SC70-6 模拟开关/多路复用器

特性工作电压&#xff1a;1.8V至5.5V导通电阻&#xff1a;5.0V时典型值为4.5Ω快速开关时间&#xff1a;导通时间20ns&#xff0c;关断时间15ns高带宽&#xff1a;300MHz高关断隔离度&#xff1a;10MHz时为 - 51dB轨到轨操作TTL/CMOS兼容先断后通切换扩展工业温度范围&#xff…

作者头像 李华