zoukankan      html  css  js  c++  java
  • PAT (Basic Level) Practice 1014 福尔摩斯的约会 (20分) (string的find函数中没查找到返回s.npos)

    1题目

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

    输入格式:

    输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。

    输出格式:

    在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。

    输入样例:

    3485djDkxh4hhGE 
    2984akDfkkkkggEdsb 
    s&hgsfdk 
    d&Hyscvnm
    

    输出样例:

    THU 14:04

    2.题目分析

    1.星期是第一个、第二个字符串中第一对相等的字符:该字符要在A到G;该字符在两个字符串中的位置要相同; 使用flag判断,找到后跳到找第二个的步骤

    2.小时是第一个、第二个字符串中第二对相等的字符:该字符在0到9+A到N;该字符在两个字符串中的位置要相同;找到后立即break,有可能还存在第三对相等字符,会覆盖答案

    3.分钟是三、四字符串中第一对相等的字符

    小时、分钟输出如果是<10,要加0在前面

    4.string中的find函数未查找到内容返回s.npos

    3.代码

    方法一:

    #include<stdio.h>
    int main()
    {
    	char a[100], b[100], c[100], d[100];
    	int flag = 0, i, j, k = 0, m = -1, flag2 = 0;
    	gets(a); gets(b); gets(c); gets(d);
    	for (i = 0; a[i] != ''&&b[i] != ''; i++)
    	{
    		if (a[i] == b[i] && (a[i] >= 'A'&&a[i] <= 'G')&&flag==0)
    		{
    
    			switch (a[i])
    			{
    			case'A':printf("MON "); break;
    			case'B':printf("TUE "); break;
    			case'C':printf("WED "); break;
    			case'D':printf("THU "); break;
    			case'E':printf("FRI "); break;
    			case'F':printf("SAT "); break;
    			case'G':printf("SUN "); break;
    			}
    			flag++;
    		}
    		else if ((a[i] == b[i] &&  (a[i] >= 'A'&&a[i] <= 'N') && flag == 1)||(a[i]==b[i]&& (a[i] >= '0'&&a[i] <= '9')&&flag==1))
    		{
    			switch (a[i])
    			{   
    			case'0':printf("00:"); break;
    			case'1':printf("01:"); break;
    			case'2':printf("02:"); break;
    			case'3':printf("03:"); break;
    			case'4':printf("04:"); break;
    			case'5':printf("05:"); break;
    			case'6':printf("06:"); break;
    			case'7':printf("07:"); break;
    			case'8':printf("08:"); break;
    			case'9':printf("09:"); break;
    			case'A':printf("10:"); break;
    			case'B':printf("11:"); break;
    			case'C':printf("12:"); break;
    			case'D':printf("13:"); break;
    			case'E':printf("14:"); break;
    			case'F':printf("15:"); break;
    			case'G':printf("16:"); break;
    			case'H':printf("17:"); break;
    			case'I':printf("18:"); break;
    			case'J':printf("19:"); break;
    			case'K':printf("20:"); break;
    			case'L':printf("21:"); break;
    			case'M':printf("22:"); break;
    			case'N':printf("23:"); break;
    			}
    			flag++;
    		}
    	}
    	
    	for (i = 0; c[i] != ''&&d[i] != ''; i++)
    	{
    		m++;
    
    		if (c[i] == d[i] && ((c[i] >= 'A'&&c[i] <= 'Z') || (c[i] >= 'a'&&c[i] <= 'z')))
    		{
    			flag2++;
    			if (m <= 9)
    				printf("0%d", m);
    			else
    				printf("%d", m);
    		}
    		if (flag2 == 1)
    			break;
    	}
    }
    

    方法2:

    
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int main()
    {
    	string a, b, c, d;
    	char aa, bb;
    	int cc;
    	cin >> a >> b >> c >> d;
    	int flag = 0;
    	for (int i = 0; i < a.length(); i++)
    	{
    		if (flag==0&&a[i] >= 'A'&&a[i] <='G'&&b.find(a[i])!=b.npos)
    		{
    			if(i<=b.length()&&a[i]==b[i])
    			aa = b[i];
    			flag++;
    		}
    		else if ( flag >0&&((a[i] >= 'A'&&a[i] <='N') || (a[i] >= '0'&&a[i] <='9')) && b.find(a[i]) != b.npos)
    		{
    			if (i <= b.length() && a[i] == b[i])
    			{
    				bb = b[i];
    				break;
    			}
    		}
    	}
    
    	for (int i = 0; i < c.length(); i++)
    	{
    		if (c[i] >= 'A'&&c[i] <= 'z'&&d.find(c[i]) != d.npos)
    		{
    			if (i <= d.length() && c[i] == d[i])
    			{
    				cc = i; break;
    				
    			}
    		}
    	}
    
    	switch (aa)
    	{
    	case'A':printf("MON "); break;
    	case'B':printf("TUE "); break;
    	case'C':printf("WED "); break;
    	case'D':printf("THU "); break;
    	case'E':printf("FRI "); break;
    	case'F':printf("SAT "); break;
    	case'G':printf("SUN "); break;
    	}
    	int hour = 0;
    	if (bb >= '0'&&bb <= '9')
    	{
    		hour = bb - 48; cout << "0" << hour << ":";
    	}
    	else if (bb >= 'A'&&bb <= 'N')
    	{
    		hour = bb - 55; cout << hour << ":";
    	}
    	if (cc >= 0 && cc <= 9)cout << "0" << cc;
    	else
    		cout << cc;
    	cout << endl;
    }
    
    //3485djDkxh4hhG0
    //2984akDfkkkkgg0dsb
    //s&hg1234567sfdk
    //s&Hy7659321scvnm
    
  • 相关阅读:
    利用delegate调试Ajax应用(转)
    Js悟透阅读节选(转)
    我的第一个PHP连接MSSQL2000示例。
    C# 时间相减得到天数
    修改桌面路径。其它路径。
    Player 网页歌曲播放器(CMP)
    麦咖啡 导出安全策略.reg文件。
    js实现几秒页面跳转的几种方式
    19,随机数,不重复。
    marquee 无缝循环
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12788972.html
Copyright © 2011-2022 走看看