博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT乙级1014
阅读量:4322 次
发布时间:2019-06-06

本文共 3839 字,大约阅读时间需要 12 分钟。

题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560

题解一(部分正确)

这是我的方法,第2个测试点没有过,和正确的代码比较,目前没比较出来错误,可能是我map用错了?

需要注意的点:

  1. 第一对是相同的大写字母A-G
  2. 第二对是相同的数字0-9和A-N
  3. 小时和分钟输出宽度为2,不足2位用零填充
  4. 不用map也行,可以用ASCII码和字符的对应关系
  5. 判断大小写字母、数字等函数C++已自带,不用自己写
// PAT BasicLevel 1014// https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560#include 
#include
#include
using namespace std;bool isUpperCase(char);bool isLowerCase(char);bool isAlpha(char);bool isNumber(char);bool isDay(char);bool isHour(char);int main(){ // 获取四个字符串 string strs[4]; for(int i=0;i<4;++i){ cin >> strs[i]; } // 字母与周几的映射 map
dayMap; dayMap['A'] = "MON";dayMap['B'] = "TUE";dayMap['C'] = "WED"; dayMap['D'] = "THU";dayMap['E'] = "FRI";dayMap['F'] = "SAT";dayMap['G'] = "SUN"; // 字母(或数字)与小时的映射 map
hourMap; hourMap[0] = 0;hourMap[1] = 1;hourMap[2] = 2;hourMap[3] = 3;hourMap[4] = 4; hourMap[5] = 5;hourMap[6] = 6;hourMap[7] = 7;hourMap[8] = 8;hourMap[9] = 9; hourMap['A'] = 10;hourMap['B'] = 11;hourMap['C'] = 12;hourMap['D'] = 13; hourMap['E'] = 14;hourMap['F'] = 15;hourMap['G'] = 16;hourMap['H'] = 17; hourMap['I'] = 18;hourMap['J'] = 19;hourMap['K'] = 20;hourMap['L'] = 21; hourMap['M'] = 22;hourMap['N'] = 23; // 遍历前两个字符串 int index; int minLen1 = strs[0].length() < strs[1].length() ? strs[0].length() : strs[1].length(); for (int i = 0; i < minLen1; ++i){ if (strs[0][i] == strs[1][i] && isDay(strs[1][i])){ cout << dayMap[strs[1][i]] << ' '; index=i; break; } } for(int i=index+1;i
< strs[3].length() ? strs[2].length() : strs[3].length(); for (int i = 0; i < minLen2; ++i){ if (strs[2][i] == strs[3][i] && isAlpha(strs[3][i])){ printf("%02d", i); break; } } //system("pause"); return 0;}bool isDay(char c){ // A-G return c >= 'A' && c <= 'G';}bool isHour(char c){ // 0-9 A-N return isNumber(c) || (c >= 'A' && c <= 'N');}bool isUpperCase(char c){ // A-Z return c >= 'A' && c <= 'Z';}bool isLowerCase(char c){ // a-z return c >= 'a' && c <= 'z';}bool isAlpha(char c){ // a-z A-Z return isLowerCase(c)||isUpperCase(c);}bool isNumber(char c){ // 0-9 return c >= '0' && c <= '9';}

题解二

网上找的,和我看起来思路一样啊……

参考链接:

#include 
//9.16#include
#include
#include
using namespace std;void deal(string ch1, string ch2);void deal1(string ch3, string ch4);int main(){ string ch1, ch2, ch3, ch4; cin >> ch1 >> ch2 >> ch3 >> ch4; deal(ch1, ch2); deal1(ch3, ch4); return 0;}void deal(string ch1, string ch2){ string day[] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; int num, num1, i = 0; while (i < ch1.length() && i < ch2.length()) { if (ch1[i] == ch2[i] && (ch1[i] >= 'A' && ch1[i] <= 'G')) //一开始没有设定范围只是判断了其是否是大写,导致有的例子通不过 { num1 = ch1[i] - 'A'; break; } i++; } i++; cout << day[num1] << ' '; int num2; while (i < ch1.length() && i < ch2.length()) { if (ch1[i] == ch2[i]) { if (isdigit(ch1[i])) { num2 = ch1[i] - '0'; break; } else if (ch1[i] >= 'A' && ch1[i] <= 'N') //一开始没有设定范围只是判断了其是否是大写,导致有的例子通不过 { num2 = 10 + (ch1[i] - 'A'); break; } } i++; } printf("%02d:", num2);}void deal1(string ch3, string ch4){ int i = 0; int num3; while (i < ch3.length() && i < ch4.length()) { if (ch3[i] == ch4[i] && isalpha(ch3[i])) { num3 = i; break; } i++; } printf("%02d", num3);}

作者:

转载请注明出处:

欢迎讨论和交流!


转载于:https://www.cnblogs.com/chouxianyu/p/11303645.html

你可能感兴趣的文章
团队编程项目作业2-团队编程项目代码设计规范
查看>>
英特尔公司将停止910GL、915GL和915PL芯片组的生产
查看>>
Maven配置
查看>>
HttpServletRequest /HttpServletResponse
查看>>
SAM4E单片机之旅——24、使用DSP库求向量数量积
查看>>
从远程库克隆库
查看>>
codeforces Unusual Product
查看>>
hdu4348 - To the moon 可持久化线段树 区间修改 离线处理
查看>>
正则表达式的搜索和替换
查看>>
个人项目:WC
查看>>
地鼠的困境SSL1333 最大匹配
查看>>
flume+elasticsearch+kibana遇到的坑
查看>>
【MM系列】在SAP里查看数据的方法
查看>>
C#——winform
查看>>
CSS3 transform制作的漂亮的滚动式导航
查看>>
《小强升职记——时间管理故事书》读书笔记
查看>>
Alpha 冲刺(3/10)
查看>>
Kaldi中的Chain模型
查看>>
spring中的ResourceBundleMessageSource使用和测试示例
查看>>
css规范 - bem
查看>>