2019 CSP-J 初赛解析

题面,成绩不是真实水平,就挑重点说一说

老师给的解析


 

T5

这是二分查找,属于是我的代码理解不太对

我的理解 
#include<iostream>
using namespace std;
int p;
int main(){
    int l = 1,r = 100;
    cin >> p;
    int cnt = 0;
    while( l < r ){
        cnt++;
        int mid = (l+r) / 2;
        if( mid == p ) break;
        if( mid < p ) l = mid+1;
        else r = mid-1;
    }
    cout << cnt;
    return 0;
}
正确理解 
#include<iostream>
using namespace std;
int p;
int main(){
    int l = 1,r = 100;
    cin >> p;
    int cnt = 0;
    while( l <= r ){
        cnt++;
        int mid = (l+r) / 2;
        if( mid == p ) break;
        if( mid < p ) l = mid+1;
        else r = mid-1;
    }
    cout << cnt;
    return 0;
}

当 p = 22 的时候,我的代码就不对了,22 本来应该是查 $7$ 次,但我的是 $6$ 次

出现这个问题的原因就是,我的算法不会考虑这个数到底是不是 22 ,

但现在的 mid 已经大于 21 而且 小于 23 了,我的算法会直接判断这个数就是 22,

实际上需要有一步筛查是判断当前到底是不是 22 ,

所以我的算法最终给的答案是 $6$,但实际上是 $7$


 

T7

这玩意好像只能枚举。。。

加油

最终枚举出来应该是:

袋子   1         2        3        4        方案数

            0        0        0       0~4      5

            0        0        1      1~3       3

            0        0        2       2~3      2

            0        1        1       1~3      3

            0        1        2       2          1

            0        2        2       2          1

            1        1        1       1~2      2

            1        1         2         2        1

 最终最后是 $5 + 3 + 2 + 3 + 1 + 1 + 2 + 1 = 18$ 种


 

T11:

最好的跑法为:(依次代表周一到周天跑的公里数)

   3 3 0 0 5 5 5

 最终消耗的热量为:$ 2\times300+3\times600 = 2400 $ 千卡


 

T13:

每个车牌号可以理解成 ABCBA

很肯定的是,C 只能是 0、1、8 中的一个

然后 A 可以从 0、1、8、6、9 中取一个

B 跟 A 一样

所以一共有 $3\times5\times5$ 种车牌号


T16:

这个程序就是算出改变所有下标为字符串长度 n 的因子的a[i],

将其从小写字母转变为大写字母

当然这是最直观的感受,如果能大体记住ASCII码的话会发现不仅仅局限于小写字母

所以这里的 (1) 就可以得出答案了:错误

(2):正确,由于这个 i 枚举的是所有 n 的因子,所以 i 肯定是不能取到 0

(3):错误,以 n = 36 举例,按照原来的程序跑,i 可以取到 $12$ 和 $18$

     但是改了以后 i 就只能取到 $6$ 了,所以很显然这个是不可以这么改动的

(4):正确,因为 $'A' < 'a'$ ,所以这个 if 循环压根就进不去

 

(5):6,因为 18 的因子一共只有 $6$ 个:$1、18、2、9、3、6$,要改变就变他们

(6):100000,很显然,其他选项的因子没那么多


 

T17:

(1):一开始觉得很有可能是:x = y = 0

  刚才悟了半天才悟出来,这个 ++ans 的循环是从 $1$  开始的。。。

 

剩下的不想再单独解释了,自己看老师推荐的题解吧。。。

 

附:LAN 局域网 WAN 广域网 MAN 城域网 LNA 低噪声放大器

posted @ 2021-09-17 19:48  little_sheep_xiaoen  阅读(206)  评论(0编辑  收藏  举报