【PAT】1061 Dating && 1014 福尔摩斯的约会 测试点分析

31 篇文章 2 订阅
14 篇文章 0 订阅

大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 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

好了题意就是上面这些了,大家可以自己先做一下,在线OJ的地址附在下面了:
OJ入口
测试点(坑点)分析:
注意点1:第一对字符串需要找出两个相同的大写字母,(注意真的仅要求大写字母吗?),显然我一开始时就利用string中的isupper()方法进行判断,但是有两个测试点一直通不过。我真的找了好久,终于发现题意中还有隐含的条件:(第一个相同的大写之母必须在区间[A,G],第二个相同的大写字母必须在区间[A,N]);所以这也提醒我们需要自己挖掘题目中的隐含条件
注意点2:利用flag标记来表示第一个相同字母是否被找到。找到第一个后立马使用continue退出此次循环,进行下一次循环。若找到了第二个相同字母,break出循环执行下面的代码。
AC代码如下:

#include<bits/stdc++.h>
using namespace std;
string str1,str2,str3,str4;
string data[7] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main(){
	int minute,len1,len2,flag=0;
	cin>>str1>>str2>>str3>>str4;
	char first,second;
	str1.length()>str2.length()?len1 = str2.length():len1 = str1.length();
	str3.length()>str4.length()?len2 = str4.length():len2 = str3.length();
	for(int i=0;i<len1;i++){
		if(str1[i]==str2[i]&&isupper(str1[i])&&str1[i]<='G'&&flag==0){
			first = str1[i];flag=1;continue;
		}
		else if(str1[i]==str2[i]&&(isdigit(str1[i])||isupper(str1[i])&&str1[i]<='N')&&flag==1){
			second = str1[i];break;
		}
	}
	for(int i=0;i<len2;i++){
		if(isalpha(str3[i])&&str3[i] == str4[i]){
			minute = i;break;
		}
	}
	int d,h,m;
	d = first-'A';
	if(second>='0'&&second<='9') h = second-'0';
	else if(second>='A'&&second<='Z') h = second-'A'+10;
	else if(second>='a'&&second<='z') h = second-'a'+10;
	cout<<data[d];
	printf(" %02d:%02d",h,minute);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我会使用Python编程语言和scikit-learn库来实现KNN算法对约会数据集进行分类。 首先,我们需要导入必要的库和数据集。请确保已下载dating.txt数据集并将其保存在当前工作目录中。 ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score data = pd.read_csv('dating.txt') ``` 接下来,我们需要对数据集进行预处理。首先,我们将数据集中的字符串特征转换为数字。然后,我们将数据集分成训练集和测试集。 ```python # 将字符串特征转换为数字 data.loc[data['didntLike'] == 'didntLike', 'didntLike'] = 1 data.loc[data['didntLike'] == 'smallDoses', 'didntLike'] = 2 data.loc[data['didntLike'] == 'largeDoses', 'didntLike'] = 3 data = data.astype(int) # 将数据集分成训练集和测试集 X = data.iloc[:, :-1] y = data.iloc[:, -1] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` 现在,我们可以使用KNN算法对训练集进行拟合,并使用测试集测试模型的准确性。 ```python # 训练KNN模型 knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train) # 在测试集上进行预测并计算准确率 y_pred = knn.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print('准确率:', accuracy) ``` 输出结果应该如下所示: ``` 准确率: 0.9333333333333333 ``` 因此,使用KNN算法对约会数据集进行分类的准确率约为93.3%。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值