news 2026/6/7 6:36:55

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/5/28 17:11:20

多路温度采集(有完整资料)

资料查找方式&#xff1a; 特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可 编号&#xff1a; CP-51-2021-018 设计简介&#xff1a; 本设计是基于单片机的多路温度采集系统&#xff0c;主要实现以下功能&#xff1a; 可通过LCD1602显示温度和状…

作者头像 李华
网站建设 2026/5/28 16:31:53

AI短剧制作小程序源码系统,全智能创作系统源码全览

温馨提示&#xff1a;文末有资源获取方式当AI技术能将短剧制作成本压缩至传统方式的10%以下&#xff0c;当几个人几天内就能无拍摄完成一部剧集&#xff0c;“AI短剧”已从概念走进现实&#xff0c;成为普通人内容创业的黄金赛道。面对广阔前景与激烈竞争&#xff0c;一套功能强…

作者头像 李华
网站建设 2026/5/29 1:45:52

JS防爬虫3板斧

一、核心概念 1.1 JS防爬虫的基本原理 JS防爬虫是指通过JavaScript代码实现的反爬虫措施&#xff0c;其核心思想是&#xff1a; 浏览器执行验证&#xff1a;向客户端返回一段JavaScript代码&#xff0c;只有真实浏览器才能执行动态参数生成&#xff1a;通过JS计算生成动态token…

作者头像 李华
网站建设 2026/5/29 16:05:24

低功耗不是口号:LPWAN智能井盖如何实现3年免维护?

在智慧城市基础设施监测场景中&#xff0c;井盖看似微不足道&#xff0c;却是典型的“部署易、运维难”节点。它分布广、环境恶劣、无外部供电&#xff0c;且要求长期稳定运行——这对物联网终端的低功耗设计提出了极高要求。近年来&#xff0c;基于LPWAN&#xff08;低功耗广域…

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

UVa 137 Polygons

题目描述 题目给出了两个凸多边形&#xff0c;这两个多边形可能重叠&#xff0c;也可能不重叠。如果它们重叠&#xff0c;重叠的程度和方式也会有所不同。要求编写一个程序&#xff0c;读取两个凸多边形的顶点坐标&#xff08;按顺时针顺序给出&#xff09;&#xff0c;并计算…

作者头像 李华