CSP-J 学习笔记 Day1

· · 个人记录

第一题 字母

【问题描述】

自从吃了2018年普及组第一题的亏,凯凯决定好好练习字符串的相关算法。他现在想把一个字符串中的大写字母变成小写字母,小写字母变成大写字母。请问凯凯应该如何做?

【输入格式】

输入文件名为 letter.in
输入包括1行,包含若干个单词,单词间用空格隔开,单词可能由小写字母、大写字母以及数字和标点符号组成。

【输出格式】

输出文件名为 letter.out
输出文件只有 1 行,包含一个字符串,即为变换后的字符串。

思路&做法

由于有空格,用getline读进一行字符串,再写出以下代码:

for(int i=1;i<s.size();i++){
    if(s[i]==' ')
        continue;

   else if(s[i]>='A'&&s[i]<='Z')
        s[i]+=32;
   else if(s[i]>='a'&&s[i]<='z')
        s[i]-=32;
}

记得要getline

第二题 猜硬币

【问题描述】

凯凯和贝贝在玩猜硬币的游戏,游戏规则是这样的:凯凯将三个杯子倒扣在桌子上,然后在贝贝看不见的情况下将一枚硬币藏入其中一个杯子。

之后,凯凯连续选择两个杯子交换若干次,每次交换后,由贝贝猜测硬币在哪个杯子中。

交换完毕后,贝贝的得分就是猜对硬币的次数。

现在请你计算贝贝最高可能获得的分数。

【输入格式】

输入文件名为coin.in
输入文件的第一行,包含一个正整数 N,代表交换的次数(0 < N < 101)。
接下来的 N 行,每行包含三个正整数abc,以一个空格隔开,代表凯凯交换了ab两个杯子,而贝贝猜的是c,三个数均在1、2、3内,且a!=b

【输出格式】

输出文件名为coin.out

输出文件有 1行,包含一个整数,代表贝贝可能的最高得分。

思路&做法

开辟一个数组pos赋值为{0,1,2,3,0,0,0,0};

再输入$c$,判断`if(pos[c]==c) cnt++` 最后退出循环输出cnt就好 # 第三题 淘金 ## 【问题描述】 在一座荒山上有 $n$ 个金矿($n≤200$),每个金矿中有一定数量的金块。同时,给出金矿之间的连接路径,并规定路径都是单向的, 且保证都是小序号金矿通向大序号金矿,不会从大序号金矿通向小金矿序号。淘金者可以决定从任意一处金矿开始挖金块,然后沿着一条路径往下挖,当挖到尽头时则停下来。请设计一个挖金块的方案,使他能挖到最多的金块。 ## 【输入格式】 输入文件名为$gold.in$。 第一行包含1个正整数$n$,表示金矿的个数。 第二行包含$n$个正整数,其中第$i$个正整数表示金矿$i$的金块数量。 接下来若干行,每行为两个正整数$x y$,表示从x到y有一条路,且$x<y$。 最后一行两个0用空格隔开,表示输入结束。 ## 【输出格式】 输出文件名为$gold.out$。 仅有一行,一个整数,表示最多挖到的金块数。 ## 思路&做法 dp 先输入,然后开一个$vis$数组大小$205^2$ $cin>>x>>y;vis[x][y]=1;

两重for循环 状态转移方程前将dp[i]设为a[]

if(vis[j][i]) dp[i]=max(dp[i],dp[j]+a[i]);

有点Longest Increasing Sequence? 我觉得就是

代码我放在蓝奏云,全部的戳此 密码:cspj 今日份单独的:戳此,密码同上