用天梯赛打开暑假生活的第十三天

发布时间 2023-07-08 22:54:53作者: 寒心小呆

从坐牢到入门的程序设计(13)

开始时间2023-07-08 13:47:06

结束时间2023-07-08 22:47:39

前言:麻了,家里漏水了....

L1-064 估值一亿的AI核心代码

一、题目编号及题目说明

二、程序功能测试及说明

一个简单的聊天机器人程序,它可以根据用户输入的问题或者句子进行回复。

三、程序设计思路及结构说明

程序首先接受一个整数 n,表示有 n 个测试用例需要处理。然后在每个测试用例中,程序读取一行用户输入的字符串 str

接下来,程序对输入的字符串进行一系列的处理:

  1. 移除多余的空格:程序通过循环遍历字符串,当遇到连续的空格时,只保留一个空格,将其他连续的空格移除。
  2. 移除字符串两端的空格:如果字符串的第一个字符或者最后一个字符是空格,则将其移除。
  3. 其他处理操作:程序调用 replace() 函数将特定的词语替换为其他词语,比如 "can you" 替换为 "A can","could you" 替换为 "A could","I" 替换为 "you","me" 替换为 "you"。然后,将字符串中的问号 "?" 替换为感叹号 "!",将字母 "A" 替换为 "I"。

最后,程序输出处理后的字符串作为机器人的回答。

四、程序源代码

#include <bits/stdc++.h>
using namespace std;
 
bool If(char op) //判断op是否为符号
{
    if (op == '0')
        return false;
    if (op >= 'a' && op <= 'z')
        return false;
    if (op >= 'A' && op <= 'Z')
        return false;
    if (op >= '0' && op <= '9')
        return false;
    return true;
}
 
string replace(string str, string ch, string op)
{
    for (int i = 0;; i++)
    {
        int l = str.find(ch, i), r = l + ch.size() - 1;
        if (l == -1)
            break;
        if (l == 0 && (str[r + 1] == ' ' || If(str[r + 1]))) //位于最前面
        {
            str.replace(l, r - l + 1, op);
        }
        else if (r == str.size() - 1 && (str[l - 1] == ' ' || If(str[l - 1]))) //位于最后
        {
            str.replace(l, r - l + 1, op);
        }
        else if ((str[r + 1] == ' ' || If(str[r + 1])) && (str[l - 1] == ' ' || If(str[l - 1]))) //位于中间
        {
            str.replace(l, r - l + 1, op);
        }
    }
    return str;
}
 
int main()
{
    int n;
    cin >> n;
    getchar();
    while (n--)
    {
        string str;
        getline(cin, str);
        cout << str << endl;
 
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] == ' ')
            {
                int j = i;
                while (j + 1 < str.size() && str[j + 1] == ' ')
                    j++;
                str.erase(i, j - i);
                i = j;
            }
        }
        if (str.size() != 0 && str[0] == ' ')
            str.erase(0, 1);
        if (str.size() != 0 && str[str.size() - 1] == ' ')
            str.erase(str.size() - 1, 1);
        for (int i = 1; i < str.size(); i++)
        {
            if (If(str[i]) && str[i - 1] == ' ')
            {
                str.erase(i - 1, 1);
                i--;
            }
        }
 
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] >= 'A' && str[i] <= 'Z' && str[i] != 'I')
                str[i] += 'a' - 'A';
        }
 
        str = replace(str, "can you", "A can");
        str = replace(str, "could you", "A could");
        str = replace(str, "I", "you");
        str = replace(str, "me", "you");
 
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] == '?')
                str[i] = '!';
            if (str[i] == 'A')
                str[i] = 'I';
        }
        cout << "AI: " << str << endl;
    }
    return 0;
}

五、题目评分

 L1-065 嫑废话上代码

一、题目编号及题目说明

二、程序功能测试及说明

它打印出一句名言:“Talk is cheap. Show me the code.” 然后程序结束执行。

 

三、程序设计思路及结构说明

main() 函数被定义为程序的入口点。在函数体内部,printf() 函数用于输出字符串,并且带有一个转义字符 \n 表示换行。

最后,return 0 表示程序正常结束并返回退出状态码0,表示程序成功执行。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    printf("Talk is cheap. Show me the code.\n");
    return 0;
}

五、题目评分

 L1-066 猫是液体

一、题目编号及题目说明

二、程序功能测试及说明

它接受用户输入的三个整数 abc,然后计算它们的乘积,并将结果输出。

三、程序设计思路及结构说明

main() 函数中,首先声明了三个整数变量 abc

然后使用 cin 语句从标准输入中获取用户输入的三个整数,并将它们分别赋值给 abc

接下来,计算变量 abc 的乘积,并将结果保存到变量 v 中。

最后,使用 printf() 函数将变量 v 的值输出,并带有一个转义字符 \n 表示换行。

最后,return 0 表示程序正常结束并返回退出状态码 0,表示程序成功执行。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    int v=a*b*c;
    printf("%d\n",v);
    return 0;
}

五、题目评分

 L1-067 洛希极限

一、题目编号及题目说明

二、程序功能测试及说明

它接受用户输入的三个浮点数 abc,根据条件进行计算,并输出结果。

三、程序设计思路及结构说明

main() 函数中,首先声明了三个浮点数变量 abc,以及一个浮点数变量 l

使用 cin 语句从标准输入中获取用户输入的三个浮点数,并将它们分别赋值给 abc

接下来,使用条件判断语句 if 判断变量 b 的值是否等于0。如果满足条件,则将 l 的值设为 a 乘以2.455;否则,将 l 的值设为 a 乘以1.26。

然后,使用 printf() 函数按照格式 "%.2f " 将变量 l 输出,并保留两位小数。

接着,使用条件判断语句判断 l 是否大于变量 c。如果满足条件,则输出 "T_T\n";否则,输出 "^_^\n"。

最后,return 0 表示程序正常结束并返回退出状态码0,表示程序成功执行。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    float a,b,c;
    float l;
    cin>>a>>b>>c;
    if(b==0)
    {
        l=a*2.455;
        printf("%.2f ",l);
    }
    else{
        l=a*1.26;
        printf("%.2f ",l);
    }
    if(l>c)
    {
        printf("T_T\n");
    }
    else{
        printf("^_^\n");
    }
    return 0;
}

五、题目评分

 L1-068 调和平均

一、题目编号及题目说明

二、程序功能测试及说明

它接受用户输入的一个整数 n,然后根据用户输入的 n 个浮点数进行计算,并输出结果。

 

三、程序设计思路及结构说明

main() 函数中,首先声明了一个整数变量 n,一个浮点数变量 sum,以及一个整数变量 i

使用 cin 语句从标准输入中获取用户输入的整数,并将其赋值给变量 n

接下来,使用 for 循环遍历 n 次,每次循环中:

  1. 声明一个浮点数变量 a
  2. 使用 cin 语句从标准输入中获取用户输入的浮点数,并将其赋值给变量 a
  3. 将 1/a 的值加到变量 sum 上。

循环结束后,将变量 sum 除以 n,并将结果赋值给变量 sum

然后,将 1/sum 的值赋值给变量 sum

最后,使用 printf() 函数按照格式 "%.2f\n" 将变量 sum 输出,并保留两位小数。

最后,return 0 表示程序正常结束并返回退出状态码 0,表示程序成功执行。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    float sum=0;
    int i=0;
    cin>>n;
    for(i=0;i<n;i++)
    {
        float a;
        cin>>a;
        sum+=1/a;
    }
    sum/=n;
    sum=1/sum;
    printf("%.2f\n",sum);
    return 0;
}

五、题目评分

 L1-069 胎压监测

一、题目编号及题目说明

 

 

二、程序功能测试及说明

它接受用户输入的一些整数,并进行一系列判断,输出对应的结果。

三、程序设计思路及结构说明

一开始,在程序中定义了一个函数 find_max,该函数接收四个整数作为参数,然后通过比较找到其中的最大值,并将其返回。

接下来,在 main() 函数中,声明了一些变量,包括一个整型数组 a[4]、两个整数变量 zdyz,以及一些计数器。使用循环语句 for 从标准输入中获取用户输入的一些整数,并将它们存储在数组 a 中。

然后,获取额外的两个整数 zdyz,它们代表一个阈值和一个允许的最大差值。

接着,调用之前定义的 find_max 函数,传入数组 a 中的四个元素,得到最大值并赋给变量 max

然后,使用 for 循环遍历数组 a,分别判断最大值与每个元素的差值是否超过了允许的最大差值 yz,以及每个元素是否小于阈值 zd。根据条件判断的结果,相应地增加计数器 flagnb 的值。

接下来,根据计数器的值进行条件判断:如果 flagnb 都为0,说明所有条件都满足,输出 "Normal";如果 flag 大于等于2或者 nb 大于等于2,输出 "Warning: please check all the tires!";否则,进一步遍历数组 a,找到满足条件的元素,并输出对应的警告信息。

最后,return 0 表示程序正常结束并返回退出状态码 0,表示程序成功执行。

四、程序源代码

#include<bits/stdc++.h>
using namespace std;
int find_max(int a, int b, int c, int d) {
    int max = a;
    if (b > max) max = b;
    if (c > max) max = c;
    if (d > max) max = d;
    return max;
}
int main()
{
    int a[4],zd,yz;
    int i=0,flag=0,nb=0;
    for(i=0;i<4;i++)
    {
        cin>>a[i];
    }
    cin>>zd>>yz;
    int max=find_max(a[0],a[1],a[2],a[3]);
    for(i=0;i<4;i++)
    {
        if(max-a[i]>yz)
        {
            flag++;
        }
        if(a[i]<zd)
        {
            nb++;
        }
    }
    if(flag==0&&nb==0)
    {
        printf("Normal\n");
    }
    else if(flag>=2||nb>=2)
    {
        printf("Warning: please check all the tires!\n");
    }
    else{
        for(i=0;i<4;i++)
    {
        if(max-a[i]>yz)
        {
            printf("Warning: please check #%d!\n",i+1);
            break;
        }
        if(a[i]<zd)
        {
            printf("Warning: please check #%d!\n",i+1);
            break;
        }
    }
    }
return 0;
}

五、题目评分

 L1-070 吃火锅

一、题目编号及题目说明

二、程序功能测试及说明

它接受用户输入的一些字符串,并进行一系列处理和判断,最后输出结果。

三、程序设计思路及结构说明

首先,在程序中定义了一些变量,包括一个字符数组 s[85] 用于存储用户输入的字符串,几个整数变量 icountfist,以及另外两个字符数组 a[]c[],分别用于比较和匹配字符串。

接下来,使用 gets 函数从标准输入中获取用户输入的字符串,并将其存储在数组 s 中。然后,进入一个 while 循环,判断用户输入的字符串是否等于字符数组 a[],如果不相等,则表示还有待处理的字符串。

while 循环中,首先递增计数器 i,用于统计信息条数。然后,使用 strlen 函数获取字符串 s 的长度,并使用 for 循环遍历字符串的每个字符。

for 循环中,通过判断当前字符是否为字母 'c',来确定是否需要进行进一步匹配。如果当前字符为 'c',则使用 strncpy 函数从当前位置开始提取长度为 14 的子字符串,并将其存储在字符数组 tmp 中。然后,将字符数组 tmp 的末尾添加一个结束符 '\0',形成一个完整的字符串。

接着,使用 strcmp 函数比较字符串 tmp 和字符数组 c[] 是否相等,如果相等,则表示匹配成功,计数器 count 递增,并记录第一次火锅消息的位置。

最后,在循环的最后,再次使用 gets 函数获取下一个用户输入的字符串,以便进行下一次的判断和处理。

当用户输入的字符串等于字符数组 a[],即结束输入时,退出 while 循环。然后,根据计数器 count 的值进行条件判断:如果 count 等于0,表示没有火锅消息,输出信息条数 i 和提示信息 "-_-#";否则,输出信息条数 i、第一次火锅消息的位置 fist 和火锅次数 count

最后,return 0 表示程序正常结束并返回退出状态码 0,表示程序成功执行。

四、程序源代码

#include <stdio.h>
#include <string.h>
int main()
{
    char s[85];
    int i=0;//统计信息条数
    int count =0;//统计火锅次数
    int fist=0;//记录第一次火锅消息的位置
    char a[]=".";
    char c[]="chi1 huo3 guo1";
    char tmp[15];
    gets(s);
        while(strcmp(s,a)!=0)
        {
            i++;
            for(int j=0;j<strlen(s);j++)
          {
                if(s[j]=='c')
               {
                    strncpy(tmp,s+j,14);
                     tmp[14]='\0';
                  if(strcmp(tmp,c)==0)
                 {     
                        count++;
                    if(count==1)
                    {
                        fist=i;
                    }
                    break;
                 }
             }
           }
            gets(s);
        }
    if(count==0)
    {
          printf("%d\n-_-#\n",i);
    }
    else
    {
         printf("%d\n",i);
        printf("%d %d\n",fist,count);
    }
        return 0;
}
 

五、题目评分

总结:今天雨下得特别特别大,大到什么程度呢,唉尼玛,二楼窗户没关,窗户边都是水。你猜我怎么知道的,我住那个屋子正下方的房间,唉我艹了,先开始,啊一滴水掉我键盘上,我拿纸一擦没事,逐渐一条线,没错都掉下来水,我抬头一看,一条缝往下滴水。我第一秒想的是,唉我拿东西挡着至少水到不了我身上。写个代码写着写着,这治标不治本啊,我上楼看看呗,第一次上楼,没走进哦没看出来有水,旁边房间一看唉也没看见水。我一下楼一想不对啊,再上楼一看,麻,这下完了都是水。唉我真是操了,楼上是什么个状况呢,反正是不知道多少年的老房子,但二楼是较新一点的,估计是我爸妈婚房那种,是瓷砖地板,一楼就是水泥地,除了大点和九栋没尼玛啥区别。这得把水都清理了啊,我先找了扫把,唉尼玛还是那种草扫帚没撮箕,我说这不行得找拖把。因为这一楼都是水泥地嘛,平常都不需要拖的那种,费劲巴拉的,眼睛尖还是在某个角落唉我找到了拖把,是那种可以旋转让拖把脱水的那种,就是那种肯定是一副套装,好找到拖把得找尼玛的破桶。我猜在厕所,唉,还真被我在厕所发现了。这个厕所是个什么状况呢?妈的我必须要说,很多人也许茅厕都没见过,这比茅厕稍微高级一点,也仅此一点。外面有灯,点开也只有微弱的光,看不到坑位,然后杂物堆得到处都是的。再说坑位,只能小便不能开大,为什么开大会堵,唉我真是操了也没人说想把“厕所”维修一个,不对,不能说是维修,其实跟毛坯房差不多,只不过用得久一点各种虫子多一点,所以说应该叫装修。再说回这个桶,这个桶应该是在“厕所”放了很久很久了,周围都是污点,不对,不是污点叫污渍,仔细一看,那个脱水的位置还有几张擦了屁股的纸,我差点国粹脱口而出,怎么说,不用了呗。我带着那个拖把就骂骂咧咧地上楼,唉,这么水怎么办。二楼有个阳台,我拿拖把吸水,然后再拿脚使劲得踩拖把让它脱水嘛,往返三次效果不大,唉走得我也累。没办法啊,还得用那个桶,无语。简单处理了一下,我整个人都炸了。拖地拖了一个小时,顺便把爸妈房间地上积攒已久的灰尘处理干净,这一个小时我想了很多很多。

每日一mo:我出生在一个大家庭里,四个爷爷,太爷爷太奶奶都对我很好。我是家里的长子,好像一出生就寄托着家族的希望。可能每个男孩都会觉得自己的父亲是超人吧,我就觉得是,从小到大只要是我说出来的需求至少父亲都会尽量满足我,我也曾提过一些比较过分的要求,比如说我想要星星,我想要月亮,有几个月我一直吵着要,那时还住在陶家岭的一间出租屋里,当时父亲的门店还没拆迁,出租屋是也是那种门店,不过父亲把它租下来作为平常落脚的地方,那里也承包了我整个童年,旁边是一家餐馆,那里我认识了我第一个玩伴吴天昊,可现在谁知他在何方,或许早已不认识我了。再旁边一家是一家水泥店,店家是一位老爷爷,平常对我很好,“星星”“月亮”就出自那里,当然如果那叫做星星月亮的话,但当时我也当做个宝贝就是了。还有一次,初中的时候学校组织了一次夏令营,说实话一套组合拳下来,嗯挺贵的,我们家为了培养一个我已经花费了很多很多了,很难承担这笔费用,我其实心动了但我没有说,好像我不知道这件事一样后来也不了了之,但我父亲好像也知道了夏令营这码子事也问过我一次,我说我不想去,他好像懂,我妈说有天下午,他躺床上哭来着。再后来,我想要的东西越来越少从我口中说出来了,他们好像懂也给我一些钱。我的爷爷是老大,我的爸爸也是,所以说他出生多少要为这一大家子人考虑,我印象最深的是我二爷爷有一个女儿因为某些原因得了很严重的尿毒症,他们一家子也为这个病操劳了很久,父亲前前后后也帮了他们很多,小的时候多少也带着我,我也看到了很多在医院的种种。父亲想要方方面面都做得很好,比如经营他的公司,比如运营好这一大家子人,比如说处理好人际关系,比如说我。我的母亲,是个温柔贤惠的女子,至少我看出来她比我父亲灵光一些,小学时候在附近的一家莱特纸业工作,有时候加班我得在学校等她,偶尔忙不过来我会去好友家吃晚饭,就这样过了几年,莱特公司搬迁孝感,母亲乏力,不得不辞职做一位社区工作者,当然也有可能是我远赴汉阳求学的缘故。她是女儿,是姐姐,她很温柔,但有时也会发脾气,很多时候都会耐下性子,但有时候也会发脾气。每个孩子都会有青春期,我不是圣人,我也不例外,当然那可以算作青春期的话。我老喜欢把各种各样的委屈无奈藏在心里,至少包裹得很好,但偶尔也会漏出来一点,反映出来我有时对家里人无理取闹,她会包容我的一些想法,其实很大部分都会包容,但也有时正好我在气头上我的想法确实太不理性了,她也会跟我争来争去,最后不欢而散。她是女儿,我的外公外婆年纪逐渐大起来了,我的外婆曾经也是大家闺秀,可她嫁给外公之后实在太穷了,当然她也有些封建思想,比如重男轻女,呃,宠我宠得像个宝,但我还小的时候对舅舅的女儿不是很感冒,其实偶尔也会和舅舅一家有些小矛盾,前些时候舅舅给外公外婆在老家重新盖一栋挺不错的小别墅,安享晚年,但耳朵越来越不好使了,外婆好像离我越来越远。

  但我们家好像并没有外人看到的那么光鲜亮丽。父亲很多时候不来事,有时候在别人面前侃侃而谈,基本上自以为是得发表一些看法。有时候会像局外人指点江山一样,说你这做的不好那做的不好,我有时候会反驳说你能做你为什么不做,他会说“我要是做,还要你干什么”。小的时候很少回家,回家也是很晚,现在回家后就是躺床上,偶尔指指点点。总感觉,他好像老了,好像越来越与时代不兼容了,很多东西都想着去玩明白,但也越来越玩不明白,到最后也干脆不接触了。母亲也许是以前太穷了,什么都想省一点,对于有些关于钱的想法一般回复都是“不了不了”,如果是逛超市我想要一些东西会说“家里有”但一般情况家里没有,我对于某些事物的热情也渐渐淡了。说到今天这件事爆发的,他们很少会去做家里的卫生,除非的有客人要来,很多时间都呈现一种脏乱差的状态,新房子那估计是以前偷工减料没做好防水厕所已经改得一塌糊涂,做清洁的方式和当时装修选料的问题,厨房到处黏糊糊的,因为住二楼,管道没做好常年积水不堪入门。再说房间,很多时候蟑螂到处爬,他们也没想办法根治往往是治标不治本,直到我买了蟑螂药后,蟑螂状况才好一点,可蟑螂的状况解决了,过年回家的时候晚上睡觉到处爬老鼠,柜子里存在狠多老鼠屎,用粘鼠板粘了至少十只老鼠,估计也没想过办法解决,估计解决的办法就是搬回老家,曾多次提过的装修,也是不了了之,多少无奈。不会去收拣,狠多东西都想要留下来,导致不管是翠堤春晓还是老家都像是他们的一个又一个储物室一样,对,没错,储物室。再说说我,我好像从小被冠以“天才”之名,被说得多了,有时候也觉得自己是个才,但我真的想笑,我是个屁的才,不过是比别人懂的快一点,稍微比别人懂的多一点,再稍微喜欢装一点,这都能被叫做天才了?其实再看看,我哪叫比别人多懂一点,我试过如果不是培优砸下去我其实跟普通人一样罢了。

  对啊,我只是个普通人,一个普通人罢了。现在九点半,其实好多好多的话我都想说的,时间间隔太长了,憋了一口气终究还是会散的。人都是在试错,在不断地选择,在不断地权衡利弊。说得对啊,我们不可能走成功别人指给我们的路,就比如我们不可能完全复刻别人的成功,一切的一切都还是会有幸存者偏差的。李白穷其一生都在等一个机会,你说现在中国机遇再多能比得上唐朝?比得上还需复兴中华么。连李白都无奈,又何谈。每个时代的成功之路不同,成功之路也有很多,就比如高考就是一条路,每年的高考都不一样却都是高考,都告诉你高考这条路能够成功,有人完成了99%,有人完成了90%,有人完成了532,......努力,这个最可笑的名词,好像所有的成功都能归结于努力,甚至还诞生了一个名词“假努力”,却忘记了前提条件。那时还小,忘记了有些人出生在罗马。好多的付出好像都在证明自己的能力,以前能说分数高是能力强的必要条件,好像现在能说是必要条件都模棱两可。一切东西只要掺了金钱都变了质,这分数和一份份证书都带着金钱的味道,钱好像能提高能力,钱好像能创造奇迹,钱好像能带来快乐。我以前好像不缺钱,我现在好像很缺钱。试错成本变高了好像,我讨厌一个人都变得好累,人心,哈哈哈哈。

  说实话,最后一部分主要是想了些别的,但还是算了。突然好累,真的.......