估值一亿的AI核心代码(简洁详细过程+题目存在漏洞)
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
- 无论用户说什么,首先把对方说的话在一行中原样打印出来;
- 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
- 把原文中所有大写英文字母变成小写,除了
I
; - 把原文中所有独立的
can you
、could you
对应地换成I can
、I could
—— 这里“独立”是指被空格或标点符号分隔开的单词; - 把原文中所有独立的
I
和me
换成you
; - 把原文中所有的问号
?
换成惊叹号!
; - 在一行中输出替换后的句子作为 AI 的回答。
输入格式:
输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。
输出格式:
按题面要求输出,每个 AI 的回答前要加上 AI:
和一个空格。
输入样例:
6
Hello ?Good to chat with you
can you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know
输出样例:
Hello ?
AI: hello!Good to chat with you
AI: good to chat with you
can you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know
ps : 这题目非常非常非常的细节,因为他给的条件单个看着还好,但连在一起就很刁钻,而且有存在漏洞(标注在原稿)
简洁版代码
#include<iostream>
#include<cstring>
using namespace std;
#define Change s2[len2++]='y',s2[len2++]='o',s2[len2++]='u';continue; // I 与 me 转换记入
int main()
{char s1[10001],s2[10001]; // 注意字符串要够大,不然会有测试点过不了int num,flag;cin >> num;getchar();// 开始数据读入 num 次while (num--){int len1,len2=0;cin.getline(s1,1001);cout << s1 << endl;/* 去掉头尾空格 */for(flag=0 ; flag<strlen(s1) ; flag++) if(s1[flag]!=' ') break;strcpy(s1,s1+flag);for(flag=strlen(s1)-1 ; flag>=0; flag--) if(s1[flag]!=' ') break;s1[flag+1] = '\0';// 初步处理: 去掉多余空格 ,大小转小写 , ? -> !len1 = strlen(s1);for(int z=0;z<len1;z++){if(s1[z]>='A' && s1[z]<='Z' && s1[z]!='I') s1[z] += 32;if(s1[z]=='?') s1[z] = '!';if(s1[z]==' ' && isalnum(s1[z+1])==0) continue;s2[len2++] = s1[z];}s2[len2]= '\0';strcpy(s1,s2); // s1 = s2len1 = len2; len2 = 0;/* 开始核心判断 */for(int z=0;z<len1;z++){// 判断 Iif(s1[z]=='I' && isalnum(s1[z-1])==0 && isalnum(s1[z+1])==0){Change;}// 判断 meif(strstr(s1+z,"me")==s1+z && isalnum(s1[z-1])==0 && isalnum(s1[z+2])==0){z++;Change }// 判断 can youif(strstr(s1+z,"can you")==s1+z && isalnum(s1[z-1])==0 && isalnum(s1[z+7])==0){s2[len2++]='I',s2[len2++]=' ',s2[len2++]='c',s2[len2++]='a',s2[len2++]='n';z+=6 ;continue; }// 判断 could youif(strstr(s1+z,"could you")==s1+z && isalnum(s1[z-1])==0 && isalnum(s1[z+9])==0){s2[len2++]='I',s2[len2++]=' ',s2[len2++]='c',s2[len2++]='o',s2[len2++]='u',s2[len2++]='l',s2[len2++]='d';z+=8 ;continue; }// 上述判断都不符合,直接存入s2[len2++] = s1[z];}// AI : 回答输出s2[len2] = '\0';cout << "AI: " << s2 << endl;}return 0;
}
这是本人的原稿,个人认为这个才是考虑最全面的AC
#include<iostream>
#include<cstring>
using namespace std;
#define Change_I s2[len2++]='y',s2[len2++]='o',s2[len2++]='u';continue; // I 与 me 转换记入
#define Change_1 s2[len2++]='I',s2[len2++]=' ',s2[len2++]='c',s2[len2++]='a',s2[len2++]='n'; // can you 转换记入
#define Change_2 s2[len2++]='I',s2[len2++]=' ',s2[len2++]='c',s2[len2++]='o',s2[len2++]='u',s2[len2++]='l',s2[len2++]='d'; // could you 转换记入操作
bool Flag_I(char s1[10001], int z);
bool Flag_M(char s[10001], int z);
int main()
{char s1[10001],s2[10001]; // 注意字符串要够大,不然会有测试点过不了int num,flag;cin >> num;getchar();// 开始数据读入 num 次while (num--){int len1,len2=0;cin.getline(s1,1001);cout << s1 << endl;/* 去掉头尾空格 */for(flag=0 ; flag<strlen(s1) ; flag++) if(s1[flag]!=' ') break;strcpy(s1,s1+flag);for(flag=strlen(s1)-1 ; flag>=0; flag--) if(s1[flag]!=' ') break;s1[flag+1] = '\0';// 初步处理: 去掉多余空格 ,大小转小写 , ? -> !len1 = strlen(s1);for(int z=0;z<len1;z++){if(s1[z]>='A' && s1[z]<='Z' && s1[z]!='I') s1[z] += 32;if(s1[z]=='?') s1[z] = '!';if(s1[z]==' ' && isalnum(s1[z+1])==0) continue;s2[len2++] = s1[z];}s2[len2]= '\0';strcpy(s1,s2);len1 = len2; len2 = 0;// 开始核心判断for(int z=0;z<len1;z++){if(s1[z]=='I') if(Flag_I(s1,z)) {Change_I}if(s1[z]=='m') if(Flag_M(s1,z)) {z++;Change_I}if(strstr(s1+z,"can you")==s1+z){if(len1==7) {Change_1;z+=6;continue;}if(z==0 && isalnum(s1[z+7])==0) {Change_1;z+=6;continue;}if(z==len1-7 && isalnum(s1[z+7])==0) {Change_1;z+=6;continue;}if(isalnum(s1[z-1])==0 && isalnum(s1[z+7])==0) {Change_1;z+=6;continue;}}if(strstr(s1+z,"could you")==s1+z){if(len1==9) {Change_2;z+=8;continue;}if(z==0 && isalnum(s1[z+9])==0) {Change_2;z+=8;continue;}if(z==len1-9 && isalnum(s1[z+9])==0) {Change_2;z+=8;continue;}if(isalnum(s1[z-1])==0 && isalnum(s1[z+9])==0) {Change_2;z+=8;continue;}}s2[len2++] = s1[z];}// AI : 回答输出s2[len2] = '\0';cout << "AI: " << s2 << endl;}return 0;
}
bool Flag_M(char s[10001], int z) {int len = strlen(s);if(len<2 || z==len || s[z+1]!= 'e') return false;if(len==2) return true;if(z==0 && isalnum(s[z+2])==0) return true;else if(z==len-2 && isalnum(s[z-1])==0) return true;elseif(isalnum(s[z-1])==0 && isalnum(s[z+2])==0 ) return true;return false;
}
bool Flag_I(char s[10000], int z) {int len = strlen(s);
// if(len==1) return true; // 答案没有考虑一句只有一个 I 的情况,所有这句没写也是对的
// else
if(z==0 && isalnum(s[z+1])==0) return true;else if(z==len-1 && isalnum(s[z-1])==0) return true;else if(len>2 && isalnum(s[z-1])==0 && isalnum(s[z+1])==0) return true;return false;
}
估值一亿的AI核心代码(简洁详细过程+题目存在漏洞)相关推荐
- 7-118 估值一亿的AI核心代码 (20 分)
7-118 估值一亿的AI核心代码 (20 分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除 ...
- L1-064 估值一亿的AI核心代码——按照规则逐一击破
一.题目 估值一亿的AI核心代码 二.分析 1.消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉: 判断是否为符号 bool If(char ...
- 7-8 估值一亿的AI核心代码 (20 分) 代码有解析
7-8 估值一亿的AI核心代码 (20 分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文 ...
- 估值一亿的AI核心代码 (20分)
估值一亿的AI核心代码 (20分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多余空格 ...
- PTA 估值一亿的AI核心代码 (20 分)
估值一亿的AI核心代码 (20 分) AI.jpg 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消 ...
- 【PTA-训练day16】L2-028 秀恩爱分得快 + L1-064 估值一亿的AI核心代码
!L2-028 秀恩爱分得快 - 分块大模拟 PTA | 程序设计类实验辅助教学平台 这个题还是挺考验 函数合理运用 和 数据模拟处理能力 的 思路: 因为可能出现-0这种输入 所以不能是int型 s ...
- 估值一亿的AI核心代码现已开源
package ai.core;import java.util.Scanner;/*** @description: AI核心代码*/ public class AiMain {public sta ...
- L1-064 估值一亿的AI核心代码(C++)
以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多余空格:把相邻单词间的多个空格换成 1 个 ...
- L1-064 估值一亿的AI核心代码 (20 分)-PAT 团体程序设计天梯赛 GPLT
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部 ...
最新文章
- 【c语言】判断一个数是否为素数
- HTML开发中的一个问题
- 什么是“缓存友好”代码?
- BZOJ3862Little Devil I——树链剖分+线段树
- linux下安装使用libuuid(uuid-generate)
- 【渝粤题库】陕西师范大学201981教育统计与测量 作业 (专升本、高起本)
- 在下拉菜单中,传递的value参数为 id时,如何拿到其 label值?
- argparse模块---解析命令行参数
- [蓝桥杯][2018年第九届真题]全球变暖
- linux7 开启端口,常用CentOS7系统防火墙开启设置和开放端口方法
- 京东宙斯php版本sdk不能用_多主机平台玩家的福音,北通宙斯T6精英版体验测评...
- ip_conntrack 模块的作用
- 【转】利用匿名namespace解决C++中重复定义的问题
- cvte软件测试在线测评,CVTE笔试题总结归纳
- win10安装IIS及操作使用
- ISCSI,FC,FCoE 存储rescan 连接的方法
- 华为手机usb调试打开后自动关闭怎么办?华为手机 usb调试为什么自动关闭?usb调试老是自动关闭怎么回事?...
- 解决SVN造成的桌面图标问号
- 康托尔点集matlab实数,康托尔集是什么。详细解释
- 【论文阅读】Zero-Resource Knowledge-Grounded Dialogue Generation
热门文章
- 视频缓存文件(.tdl)合并为新的视频文件(.mp4)
- APISIX 如何与 Hydra 集成,搭建集中认证网关助力企业安全
- 在 .NET 中使用 Web API 连接到 MongoD
- 【mahout笔记】初步理解userCF(基于用户的推荐算法)在mahout的实现
- SSL/TLS证书过期了怎么办?
- Android突破64K限制
- 基于HTML(甜品奶茶店)餐饮美食项目的设计与实现(html前端源码和论文设计)
- html5注册的正则表达,正则表达式-创建正则表达式
- 2018:秋清集·跋
- unity 小任务一之点击方块变色