diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第10套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第10套.docx deleted file mode 100644 index 474460a..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第10套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第11套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第11套.docx deleted file mode 100644 index 58b4e53..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第11套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第12套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第12套.docx deleted file mode 100644 index c23330b..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第12套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第13套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第13套.docx deleted file mode 100644 index e315102..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第13套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第14套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第14套.docx deleted file mode 100644 index e3fd847..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第14套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第15套 .docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第15套 .docx deleted file mode 100644 index 9ccd1a1..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第15套 .docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第16套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第16套.docx deleted file mode 100644 index 369f827..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第16套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第17套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第17套.docx deleted file mode 100644 index 46d725d..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第17套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第18套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第18套.docx deleted file mode 100644 index 42ca9d3..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第18套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第1套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第1套.docx deleted file mode 100644 index 2ed47a1..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第1套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第2套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第2套.docx deleted file mode 100644 index 1ab2f87..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第2套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第3套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第3套.docx deleted file mode 100644 index 5386e6c..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第3套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第4套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第4套.docx deleted file mode 100644 index 2bc6e93..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第4套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第5套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第5套.docx deleted file mode 100644 index 4f180e2..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第5套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第6套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第6套.docx deleted file mode 100644 index 19e73e5..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第6套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第7套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第7套.docx deleted file mode 100644 index 982beb1..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第7套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第8套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第8套.docx deleted file mode 100644 index afd6443..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第8套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第9套.docx b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第9套.docx deleted file mode 100644 index e200d63..0000000 Binary files a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/CSP初赛模拟考试·第9套.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S04P01-B011.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S04P01-B011.png new file mode 100644 index 0000000..b4dd61a Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S04P01-B011.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S06P05-B020.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S06P05-B020.png new file mode 100644 index 0000000..6b18e91 Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S06P05-B020.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S07P05-B072.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S07P05-B072.png new file mode 100644 index 0000000..3b3b99e Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S07P05-B072.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S08P01-B016.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S08P01-B016.png new file mode 100644 index 0000000..dd8cc7e Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S08P01-B016.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S13P06-B007.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S13P06-B007.png new file mode 100644 index 0000000..6ff4b93 Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S13P06-B007.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S13P06-B009.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S13P06-B009.png new file mode 100644 index 0000000..9552255 Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S13P06-B009.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S15P01-B021.png b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S15P01-B021.png new file mode 100644 index 0000000..b1e2974 Binary files /dev/null and b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/S15P01-B021.png differ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉搜索树.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉搜索树.svg new file mode 100644 index 0000000..1b9c09a --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉搜索树.svg @@ -0,0 +1 @@ +831016144713a[1].valuea[1].left_child 下标a[1].right_child 下标 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-1至15.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-1至15.svg new file mode 100644 index 0000000..c7e7343 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-1至15.svg @@ -0,0 +1 @@ +123456789101112131415 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-1至31.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-1至31.svg new file mode 100644 index 0000000..acb01d4 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-1至31.svg @@ -0,0 +1 @@ +12345678910111213141516171819202122232425262728293031 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-1.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-1.svg new file mode 100644 index 0000000..0199c4c --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-1.svg @@ -0,0 +1 @@ +ABC \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-2.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-2.svg new file mode 100644 index 0000000..900a185 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-2.svg @@ -0,0 +1 @@ +CBA \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-3.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-3.svg new file mode 100644 index 0000000..34f4a78 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-BAC-3.svg @@ -0,0 +1 @@ +BAC \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-缺12与15.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-缺12与15.svg new file mode 100644 index 0000000..51ae292 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-缺12与15.svg @@ -0,0 +1 @@ +12345678910111314 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-顺序存储.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-顺序存储.svg new file mode 100644 index 0000000..5e41825 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/二叉树-顺序存储.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-1.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-1.svg new file mode 100644 index 0000000..fce3cca --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-1.svg @@ -0,0 +1 @@ +15423 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-2.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-2.svg new file mode 100644 index 0000000..034e0ef --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-2.svg @@ -0,0 +1 @@ +15423 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-3.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-3.svg new file mode 100644 index 0000000..d71b0cc --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-3.svg @@ -0,0 +1 @@ +15423 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-4.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-4.svg new file mode 100644 index 0000000..b6f8592 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/数组跳转-4.svg @@ -0,0 +1 @@ +15423 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/无向图-A0-A3.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/无向图-A0-A3.svg new file mode 100644 index 0000000..af0508c --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/无向图-A0-A3.svg @@ -0,0 +1 @@ +A₀A₁A₂A₃ \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/无向图-abcde.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/无向图-abcde.svg new file mode 100644 index 0000000..cc70af9 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/无向图-abcde.svg @@ -0,0 +1 @@ +abcde \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/有向图-入度出度.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/有向图-入度出度.svg new file mode 100644 index 0000000..fd4588b --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/有向图-入度出度.svg @@ -0,0 +1 @@ +12345 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/有向图-强连通.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/有向图-强连通.svg new file mode 100644 index 0000000..bbfb178 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/有向图-强连通.svg @@ -0,0 +1 @@ +abcd \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-1.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-1.svg new file mode 100644 index 0000000..b83b50c --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-2.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-2.svg new file mode 100644 index 0000000..21c9ebd --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-3.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-3.svg new file mode 100644 index 0000000..641fce9 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-4.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-4.svg new file mode 100644 index 0000000..e90c521 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-5.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-5.svg new file mode 100644 index 0000000..6322f89 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-6.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-6.svg new file mode 100644 index 0000000..84108d8 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/火柴图-6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/笛卡尔树.svg b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/笛卡尔树.svg new file mode 100644 index 0000000..5a1f8b5 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/assets/figures/笛卡尔树.svg @@ -0,0 +1 @@ +93718121020151851359781012152018 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第01套-答案解析.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第01套-答案解析.md new file mode 100644 index 0000000..1c54dab --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第01套-答案解析.md @@ -0,0 +1,330 @@ +
CSP-J 初赛模拟卷(第 01 套)
+
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | A | C | B | B | A | C | D | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | B | A | B | B | D | A | + +**逐题解析** + +##### 第1题 + +**答案:** A + +**解析:** 中国的国家顶级域名为 `.cn`;`.ch` 是瑞士的国家顶级域名。 + +##### 第2题 + +**答案:** A + +**解析:** C 语言属于过程式程序设计语言;C++、Java 和 C# 均支持面向对象程序设计。 + +##### 第3题 + +**答案:** C + +**解析:** 先将第一个数作为当前最大值,再依次与其余 $N-1$ 个数比较。每次比较至多排除一个候选最大值,因此至少需要 $N-1$ 次比较。 + +##### 第4题 + +**答案:** B + +**解析:** 先计算 `b+c`,其后缀表达式为 `bc+`;再与 `a` 相乘,最后与 `d` 相乘,得到 `abc+*d*`。 + +##### 第5题 + +**答案:** B + +**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。 + +##### 第6题 + +**答案:** A + +**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。 + +##### 第7题 + +**答案:** C + +**解析:** 由辗转相除法,$377=319+58$,$319=5\times58+29$,$58=2\times29$,所以最大公约数为 $29$。 + +##### 第8题 + +**答案:** D + +**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。 + +##### 第9题 + +**答案:** C + +**解析:** 若先序遍历为 `ACB`,则根为 `A`。由中序遍历 `BAC` 可知 `B` 在左子树、`C` 在右子树,先序遍历必须先访问 `B` 再访问 `C`,与 `ACB` 矛盾。 + +##### 第10题 + +**答案:** B + +**解析:** 从 `a` 出发,可能的深度优先遍历包括 `a-b-d-c-e`、`a-c-e-d-b` 和 `a-c-d-b-e`。最后访问的顶点只能是 `b` 或 `e`,共有 $2$ 个。 + +##### 第11题 + +**答案:** A + +**解析:** 从 $A_0$ 进入 $A_1$ 后,$A_1$ 的未访问邻接点 $A_3$ 必须先被访问,不能直接转到与 $A_1$ 不相邻的 $A_2$,因此选项 A 不可能。 + +##### 第12题 + +**答案:** B + +**解析:** 依次选出三对人员,再除去三支队伍的排列顺序,得到 $\dfrac{\binom62\binom42\binom22}{3!}=15$ 种。 + +##### 第13题 + +**答案:** B + +**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。 + +##### 第14题 + +**答案:** D + +**解析:** 代入 $x=\mathrm{true}$、$y=\mathrm{true}$、$z=\mathrm{false}$,A、B、C 均因与 $z$ 进行逻辑与而为假;D 中 $x\land y$ 为真,因此整个逻辑或表达式为真。 + +##### 第15题 + +**答案:** A + +**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | √ | B | B | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。 + +###### 第18题 + +**答案:** ×(错误) + +**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。 + +###### 第20题 + +**答案:** B + +**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。 + +###### 第21题 + +**答案:** B + +**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。 + +##### 程序(2) + +**程序分析:** 当 $k>1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | D | B | D | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。 + +###### 第23题 + +**答案:** ×(错误) + +**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le nA[p-1].b`) + +**解析:** 已保留区间的右端点严格递增;只有当前右端点大于最后保留区间的右端点时,才有保留价值。 + +###### 第37题 + +**答案:** A(`q+1CSP-J 初赛模拟卷(第 02 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | C | D | A | A | D | C | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | A | D | D | D | B | C | + +**逐题解析** + +##### 第1题 + +**答案:** D + +**解析:** 打印机将计算机中的信息输出到纸张上,属于输出设备;扫描仪、键盘和鼠标属于输入设备。 + +##### 第2题 + +**答案:** C + +**解析:** $b$ 位二进制最多表示 $2^b$ 种状态。因为 $2^8=256$,所以至少需要 $8$ 位。 + +##### 第3题 + +**答案:** D + +**解析:** 若先输出 `c`、`d`,则 `a`、`b` 仍在栈中,且 `b` 位于 `a` 上方。在输出 `a` 之前必须先输出 `b`,因此 `c,d,a,e,b` 不合法。 + +##### 第4题 + +**答案:** A + +**解析:** 高度为 $5$ 时,前 $4$ 层必须填满,最后一层可从左到右放置 $1$ 至 $16$ 个结点。结点数确定后形态唯一,因此有 $16$ 种形态。 + +##### 第5题 + +**答案:** A + +**解析:** $(11.01)_2=1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2}=3.25$。 + +##### 第6题 + +**答案:** D + +**解析:** 8 位无符号整数的范围是 $0$ 至 $2^8-1=255$。选项中能表示的数为 $133$ 和 $199$,其中较大的是 $199$。 + +##### 第7题 + +**答案:** C + +**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。 + +##### 第8题 + +**答案:** C + +**解析:** $(101.11)_2=2^2+2^0+2^{-1}+2^{-2}=4+1+0.5+0.25=5.75$。 + +##### 第9题 + +**答案:** C + +**解析:** 逆序排列的 $5$ 个数共有 $\binom52=10$ 个逆序对。冒泡排序每次相邻交换恰好减少一个逆序对,因此需要 $10$ 次交换。 + +##### 第10题 + +**答案:** A + +**解析:** 三个数字各不相同时有 $3!=6$ 种。数字 `1` 出现两次时,另一位可选 `2` 或 `3`,共 $2\times3=6$ 种;数字 `2` 出现两次时同样有 $6$ 种。合计 $18$ 种。 + +##### 第11题 + +**答案:** D + +**解析:** 选项 D 对 $2,6,10,17$ 分别得到 $1,2,3,4$,四个地址互不相同;其余三个哈希函数均产生重复地址。 + +##### 第12题 + +**答案:** D + +**解析:** 寄存器位于 CPU 内部,用于暂存操作数、地址及中间结果,是 CPU 的重要组成部分。 + +##### 第13题 + +**答案:** D + +**解析:** 展开递推式可得 $T(n)=T(0)+1+2+\cdots+n=1+n(n+1)/2$,所以时间复杂度为 $O(n^2)$。 + +##### 第14题 + +**答案:** B + +**解析:** 小于 $100$ 的最大素数为 $97$;$98$、$99$ 和 $100$ 均为合数。 + +##### 第15题 + +**答案:** C + +**解析:** 当数组已经按非递减顺序排列时,第一趟需比较相邻元素 $n-1$ 次,但不发生交换,`FLAG` 保持为 $1$,随后循环结束。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 程序将 Base64 字符映射为 6 位整数,再将每四个编码字符组合为至多三个原始字节。`ans` 是全局字符数组,输出时按以零结尾的 C 字符串处理。题目规定 `char` 为有符号的 8 位类型。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | B | B | C | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** 限定的字符集合是 Base64 编码的输入字符集;解码结果可以包含空格等其他字符,因此该断言错误。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 例如 `YQ==` 解码为 `a`,`YQA=` 解码为 `a` 后跟零字节。用 `%s` 输出时都会在零字节处结束,第二行同为 `a`。 + +###### 第18题 + +**答案:** √(正确) + +**解析:** `table[0]` 被初始化为全一位模式 `0xff`,在题目规定的有符号 8 位 `char` 中表示 $-1$,转为 `int` 后仍为 $-1$。 + +###### 第19题 + +**答案:** B + +**解析:** 循环每次处理 $4$ 个输入字符,每轮只进行常数次运算,总时间复杂度为 $O(n)$。 + +###### 第20题 + +**答案:** B + +**解析:** 将 `Y3Nx` 按 Base64 解码,依次得到字符 `c、s、q`,所以输出 `csq`。 + +###### 第21题 + +**答案:** C + +**解析:** 该字符串解码为 `ccf 2021`,其中 `ccf` 与年份之间有一个空格,不能省略。 + +##### 程序(2) + +**程序分析:** 每次合并相邻两项,第一分量和第二分量分别相加,代价为两项第一分量之和加上第二分量之差的绝对值。DFS 枚举所有合并顺序并恢复现场,`ans` 保存最大总代价;也可用区间动态规划核对结果。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | B | C | C | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** $n=0$ 时不满足递归终止条件,但合并循环也不会执行,函数直接返回,最终输出 $0$,不会因该输入而死循环。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 所有输入为零时,每次合并代价均为零,所以任何合并顺序的总代价均为零。 + +###### 第24题 + +**答案:** ×(错误) + +**解析:** 取 $n=1$,不发生任何合并,输出为 $0$;若唯一输入项大于零,输出就小于该输入值。 + +###### 第25题 + +**答案:** B + +**解析:** 第一分量全为 $9$、第二分量全为零时,最优顺序依次合并为含 $2,3,\ldots,20$ 项的区间,总代价为 $9(2+3+\cdots+20)=1881$。 + +###### 第26题 + +**答案:** C + +**解析:** 合并后的第二分量为已有项数的 $5$ 倍。最优链式合并的各次差值为 $5\times0,5\times1,\ldots,5\times28$,总代价为 $2030$。 + +###### 第27题 + +**答案:** C + +**解析:** 对每个连续区间枚举最后一次合并位置,按合并公式取最大值;对两行均为 $15,14,\ldots,1$ 的数据计算,最大总代价为 $2240$。 + +##### 程序(3) + +**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | × | × | × | A | A | + +###### 第28题 + +**答案:** √(正确) + +**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。 + +###### 第29题 + +**答案:** ×(错误) + +**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。 + +###### 第30题 + +**答案:** ×(错误) + +**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。 + +###### 第31题 + +**答案:** ×(错误) + +**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x> 1`) + +**解析:** 区间更新为 `a=mid+1` 或 `b=mid`,应使用向下取整的中点 `(a+b)>>1`,保证区间收缩。 + +###### 第42题 + +**答案:** B(`cmp(A[mid], p)`) + +**解析:** 当 `A[mid]` 按同一比较规则小于目标点 `p` 时,目标应在右侧,因此使用 `cmp(A[mid],p)`。 + +###### 第43题 + +**答案:** D(`A[i].x < A[j].x && A[i].y < A[j].y`) + +**解析:** 要求两点满足 `x`、`y` 坐标均严格递增,以分别作为左下和右上顶点,避免退化矩形和重复计数。 diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第03套-答案解析.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第03套-答案解析.md new file mode 100644 index 0000000..87a9747 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第03套-答案解析.md @@ -0,0 +1,334 @@ +
CSP-J 初赛模拟卷(第 03 套)
+
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | B | A | D | D | C | C | B | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | D | C | A | C | A | C | + +**逐题解析** + +##### 第1题 + +**答案:** A + +**解析:** 将 A 化简为 $P\lor[\neg P\land(Q\lor\neg Q)]=P\lor\neg P=\mathrm{true}$,所以它是恒真式。 + +##### 第2题 + +**答案:** B + +**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。 + +##### 第3题 + +**答案:** A + +**解析:** $(11.01)_2=1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2}=3.25$。 + +##### 第4题 + +**答案:** D + +**解析:** 降低浮点数精度时,舍入可能使数值变大、变小或保持不变,但不会把正数变为负数,或把负数变为正数。 + +##### 第5题 + +**答案:** D + +**解析:** “存储程序”是冯·诺依曼体系结构的核心思想,即将程序指令与数据存放在存储器中,由计算机依次取指执行。 + +##### 第6题 + +**答案:** C + +**解析:** 每次切换大小写后输出 `A、S、D` 或 `a、s、d`,每 $6$ 个字符循环一次。$81\bmod6=3$,因此第 $81$ 个字符是大写 `D`。 + +##### 第7题 + +**答案:** C + +**解析:** 只含一种字母的不同非空子串有 $3\times3=9$ 个;跨越 `A/B` 或 `B/C` 边界的各有 $3\times3=9$ 个;同时含 `A、B、C` 的有 $3\times3=9$ 个。共 $9+9+9+9=36$ 个。 + +##### 第8题 + +**答案:** B + +**解析:** 广度优先搜索按距起点的层次逐层扩展,先发现的结点先被扩展,因此通常使用先进先出的队列。 + +##### 第9题 + +**答案:** C + +**解析:** 在搜索引擎中给关键词加双引号,通常表示按完整词组进行精确匹配。 + +##### 第10题 + +**答案:** D + +**解析:** 选项 D 对四个关键字依次得到 $\lfloor\sqrt2\rfloor=1$、$\lfloor\sqrt6\rfloor=2$、$\lfloor\sqrt{10}\rfloor=3$、$\lfloor\sqrt{17}\rfloor=4$,不发生地址冲突。 + +##### 第11题 + +**答案:** C + +**解析:** 按递归条件展开:`solve(7)=7*solve(5)`,`solve(5)=5*solve(3)`,`solve(3)=3*solve(2)`,`solve(2)=2*solve(1)`。因此结果为 $7\times5\times3\times2=210$。 + +##### 第12题 + +**答案:** A + +**解析:** 先把元素两两比较,每对的较大者参与最大值比较,较小者参与最小值比较。偶数个元素需 $3N/2-2$ 次,奇数个元素需 $3(N-1)/2$ 次,统一表示为 $\lceil3N/2\rceil-2$。 + +##### 第13题 + +**答案:** C + +**解析:** 先求四人生日月份互不相同的概率,再取补集:$1-\dfrac{12\times11\times10\times9}{12^4}=\dfrac{41}{96}$。 + +##### 第14题 + +**答案:** A + +**解析:** 前序遍历的首结点 `A` 是根。若左子树根为 `B`,其结点应在后序遍历中形成以 `B` 结尾的连续段 `CB`,因此左子树可以有 `B、C` 两个结点。 + +##### 第15题 + +**答案:** C + +**解析:** 从 1999 年 10 月 1 日到 2017 年 10 月 1 日相隔 $18\times365+5=6575$ 天,其中包含 2000、2004、2008、2012、2016 年的闰日。$6575\bmod7=2$,由星期日向前推 $2$ 天为星期五。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** `encoder` 先放入 `C、S、P`,再按字母序补齐其余字母;`decoder` 是其逆映射。程序把输入字母按这张逆映射表逐个替换。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | × | √ | × | A | D | + +###### 第16题 + +**答案:** √(正确) + +**解析:** 下标为 `st[i]-'A'`,只有大写字母才能保证下标位于 $0$ 至 $25$ 之间。 + +###### 第17题 + +**答案:** ×(错误) + +**解析:** 并非每个字母都会变化,例如字母 `Z` 的映射仍为 `Z`,输入 `Z` 就与输出相同。 + +###### 第18题 + +**答案:** √(正确) + +**解析:** 需要检查是否预先出现的特殊字母 `C、S、P` 都在前三个位置;后续补入的字母小于当前枚举字母,不会造成遗漏,因此修改该检查上界不影响结果。 + +###### 第19题 + +**答案:** ×(错误) + +**解析:** 只建立前 $16$ 个位置的逆映射会漏掉后续字母,部分输入无法被正确还原,输出可能改变。 + +###### 第20题 + +**答案:** A + +**解析:** 要输出 `A、B、C`,输入应分别是 `encoder[0..2]`,即 `C、S、P`,因此输入既有 `S` 又有 `P`。 + +###### 第21题 + +**答案:** D + +**解析:** 输出 `C、S、P` 分别对应输入 `P、R、N`,所以输入既没有 `S`,也没有 `A`。 + +##### 程序(2) + +**程序分析:** 程序先用 Floyd 算法求最短路,再枚举一对顶点,将其间距离设为零并更新最短路,最后取所有无序顶点对距离之和的最小值。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | √ | A | A | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** Floyd 算法需要把中转顶点 `k` 放在最外层,保证阶段性状态含义;改为 `i,j,k` 后不再具有这一保证,结果可能改变。 + +###### 第23题 + +**答案:** ×(错误) + +**解析:** 读入边需要 $O(m)$ 时间,后续枚举和更新需要 $O(n^4)$ 时间,整体可写为 $O(m+n^4)$,不能说所有运行步骤都与 $m$ 无关。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** 在允许的图规模和边权下,最优距离总和也可能大于 $10^7$。若把 `ans` 初始化为该值,取最小值时就可能保留错误的初值。 + +###### 第25题 + +**答案:** √(正确) + +**解析:** 两次更新分别允许经由顶点 `i` 和 `j`,最终允许的中转顶点集合相同,因此交换这两次更新的顺序不影响结果。 + +###### 第26题 + +**答案:** A + +**解析:** 对给定图枚举置零的顶点对并计算更新后的无序点对最短路之和,最小结果为 $14$。 + +###### 第27题 + +**答案:** A + +**解析:** 代码使用“枚举中转点并松弛任意两点距离”的 Floyd 算法。 + +##### 程序(3) + +**程序分析:** DFS 从每个顶点出发枚举不重复顶点的路径,回溯时撤销访问标记,`ans` 记录路径权值之和的最大值,即最长简单路径长度。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | √ | D | B | B | C | + +###### 第28题 + +**答案:** √(正确) + +**解析:** 简单无向完全图的所有非对角邻接项都会被输入边覆盖;对角项不会被用于访问已标记的当前顶点,因此可省略这段初始化。 + +###### 第29题 + +**答案:** √(正确) + +**解析:** 所有起点仍会被完整枚举,改变枚举先后不影响最终取到的最大值。 + +###### 第30题 + +**答案:** D + +**解析:** 图中两个连通分量各只有一条权值为 $1$ 的边,最长简单路径长度为 $1$。 + +###### 第31题 + +**答案:** B + +**解析:** 四个顶点的完全图中,每条边权值为 $1$,简单路径至多经过 $3$ 条边,且可以达到,因此输出 $3$。 + +###### 第32题 + +**答案:** B + +**解析:** 顶点 $4$ 孤立,三角形中最长简单路径可取 $2\to3\to1$,长度为 $20+30=50$。 + +###### 第33题 + +**答案:** C + +**解析:** 取路径 $3\to1\to4\to2$,长度为 $50+40+60=150$;枚举其他简单路径也不能得到更大值。 + +#### **三、完善程序** + +##### 程序(1) + +**程序分析:** 将每名射手指向目标构成出度为 $1$ 的有向图。程序先处理入度为零的树枝,再处理剩余有向环;`w=1` 表示计入存活人数,并沿目标方向交替处理状态。 + +**答案速查** + +| 题号 | 34 | 35 | 36 | 37 | 38 | +| :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | D | D | A | C | + +###### 第34题 + +**答案:** C(`in[a[cur]]--;`) + +**解析:** 处理当前结点后,应删除它指向目标的那条边,使目标入度减一,即 `in[a[cur]]--`。 + +###### 第35题 + +**答案:** D(`in[a[cur]]==0 | w==1`) + +**解析:** 目标入度降为零时可继续处理;当前结点状态为 `w==1` 时也需继续处理其目标。因此条件为 `in[a[cur]]==0 || w==1`;用位或连接两个布尔值时结果也相同。 + +###### 第36题 + +**答案:** D(`1-w`) + +**解析:** 当前结点与目标结点的状态交替,因此下一层参数为 `1-w`。 + +###### 第37题 + +**答案:** A(`dfs(i,1)`) + +**解析:** 入度为零的射手可先保留,初始状态取 $1$,故调用 `dfs(i,1)`。 + +###### 第38题 + +**答案:** C(`!vis[i]`) + +**解析:** 处理完树枝后,尚未访问的结点位于有向环中,应以 `!vis[i]` 判断是否开始处理该环。 + +##### 程序(2) + +**程序分析:** 递归函数为每个子树维护允许的开区间 `(lower_bound,upper_bound)`。当前值必须落在该区间中;左子树上界改为当前值,右子树下界改为当前值,从而验证严格二叉搜索树。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 39 | `cur < upper_bound` | +| 40 | `a[root].right_child` | +| 41 | `cur` | +| 42 | `upper_bound` | +| 43 | `1` | + +###### 第39题 + +**答案:** `cur < upper_bound` + +**解析:** 已检查 `cur>lower_bound`,还需检查 `curCSP-J 初赛模拟卷(第 04 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | C | D | B | A | A | C | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | B | C | D | A | B | C | + +**逐题解析** + +##### 第1题 + +**答案:** D + +**解析:** Linux 可执行文件没有统一的默认扩展名;能否执行主要由文件格式及执行权限决定,因此前三项均不符合。 + +##### 第2题 + +**答案:** C + +**解析:** 数组已经有序时,第一趟仍需进行 $n-1$ 次相邻比较。由于没有交换,`FLAG` 保持为 $1$,外层循环随后结束。 + +##### 第3题 + +**答案:** D + +**解析:** 按字节寻址时,$32$ 位地址总线可表示 $2^{32}$ 个地址,对应 $2^{32}$ 字节,即 $4\ \mathrm{GB}$。 + +##### 第4题 + +**答案:** B + +**解析:** 无向完全图中,每两个不同顶点之间恰有一条边,因此边数为 $\binom72=7\times6/2=21$。 + +##### 第5题 + +**答案:** A + +**解析:** CPU 负责执行运算和控制程序运行。易失性存储器断电后可能丢失数据,屏幕尺寸与分辨率不具有一一对应关系,接入互联网也不限于 Wi-Fi。 + +##### 第6题 + +**答案:** A + +**解析:** 从 $A_0$ 进入 $A_1$ 后,$A_1$ 的未访问邻接点 $A_3$ 必须先被访问,不能直接转到与 $A_1$ 不相邻的 $A_2$,因此选项 A 不可能。 + +##### 第7题 + +**答案:** C + +**解析:** 顺序存储且根下标为 $1$ 时,下标为 $i$ 的结点的左右孩子下标分别为 $2i$、$2i+1$。因此下标为 $k$ 的结点,其父结点下标为 $\lfloor k/2\rfloor$。 + +##### 第8题 + +**答案:** C + +**解析:** IPv4 地址的每一段为 $8$ 位,取值范围是 $0$ 至 $255$。选项 C 中出现了 `256`,超出了该范围。 + +##### 第9题 + +**答案:** B + +**解析:** 将三进制数按位权展开,可得 $3Z=6X+2Y$。结合数字范围及首位不为零,得到 $X=1,Y=0,Z=2$。于是 $(10)_3\times(21)_3=(210)_3$,对应 `ZXY`。 + +##### 第10题 + +**答案:** B + +**解析:** 将三个盘子中的苹果数按从大到小排列,可得 $(7,0,0)$、$(6,1,0)$、$(5,2,0)$、$(5,1,1)$、$(4,3,0)$、$(4,2,1)$、$(3,3,1)$、$(3,2,2)$,共 $8$ 种。 + +##### 第11题 + +**答案:** C + +**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。 + +##### 第12题 + +**答案:** D + +**解析:** 递推式展开后为 $T(n)=1+\sum_{i=1}^{n}i=1+n(n+1)/2$,所以时间复杂度为 $O(n^2)$。 + +##### 第13题 + +**答案:** A + +**解析:** 只打开 `B`、关闭其余阀门时,水能沿对应管道到达果树,且不会从 `A` 处流失,因此选 A。 + +##### 第14题 + +**答案:** B + +**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。 + +##### 第15题 + +**答案:** C + +**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | √ | D | B | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。 + +###### 第18题 + +**答案:** ×(错误) + +**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。 + +###### 第20题 + +**答案:** D + +**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。 + +###### 第21题 + +**答案:** B + +**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。 + +##### 程序(2) + +**程序分析:** 每个区间取最小元素为根,递归处理左右区间,最终计算各结点深度与对应 `b` 值的乘积之和,可视为在最小笛卡尔树上求加权深度和。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | A | D | D | B | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 即使最小值重复,程序也会选择扫描到的第一个最小值作为分界点,左右递归区间仍严格缩小,因此重复本身不会导致错误。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 每个结点的贡献都是 `depth*b[mink]`,当所有 `b` 均为零时,输出必为零。 + +###### 第24题 + +**答案:** A + +**解析:** 最坏情况下每次最小值都位于端点,扫描次数为 $100+99+\cdots+1=5050$,最接近 $5000$。 + +###### 第25题 + +**答案:** D + +**解析:** 最好情况下形成尽量平衡的树。$100$ 个结点的最小深度和为 $580$,相应扫描总次数也为 $580$,最接近 $600$。 + +###### 第26题 + +**答案:** D + +**解析:** 将权值 $1$ 至 $10$ 依次安排在深度 $1$ 至 $10$ 的链上,可得到最大加权深度和 $1^2+2^2+\cdots+10^2=385$。 + +###### 第27题 + +**答案:** B + +**解析:** 按层尽量填满的树使总深度最小,得到 $1\times1+2\times2+3\times4+4\times8+5\times16+6\times32+7\times37=580$。 + +##### 程序(3) + +**程序分析:** `A[i][j]` 由杨辉三角递推得到组合数 $\binom ij$ 对 `MOD` 取模的值;`sum` 为该数组的二维前缀和,同样对 `MOD` 取模。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | × | √ | C | C | + +###### 第28题 + +**答案:** ×(错误) + +**解析:** 对角线元素为 $A[i][i]=\binom ii=1$,并不是零。 + +###### 第29题 + +**答案:** ×(错误) + +**解析:** 该递推计算的是组合数而非排列数,且保存的是组合数对 `MOD` 取模后的值。 + +###### 第30题 + +**答案:** ×(错误) + +**解析:** 前缀和取模后可能从较大的值回绕到较小值,因此不能保证所述单调关系。 + +###### 第31题 + +**答案:** √(正确) + +**解析:** 在取模前额外加一个 `MOD`,不会改变对 `MOD` 取模后的余数。 + +###### 第32题 + +**答案:** C + +**解析:** 前 $10$ 行的最大组合数为 $\binom{10}5=252$,这些值均小于模数,因此无需考虑取模改变数值。 + +###### 第33题 + +**答案:** C + +**解析:** 查询为 `sum[5][3]`,即将前 $5$ 行、前 $3$ 列的组合数求和,结果为 $1+3+7+14+25=50$。 + +#### **三、完善程序** + +##### 程序(1) + +**程序分析:** 程序对可切出的整数长度进行二分。长度为 `mid` 时,第 `i` 根绳子可切出 `len[i]/mid` 段;总段数随候选长度增大而不增加,满足二分判定的单调性。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 34 | `count = count + len[i]` | +| 35 | `count < m` | +| 36 | `lbound < ubound` | +| 37 | `(lbound + ubound + 1) / 2` | +| 38 | `count = count + len[i] / mid` | + +###### 第34题 + +**答案:** `count = count + len[i]` + +**解析:** 先累加绳子总长度,等价于计算每段长度为 $1$ 时最多能切出的段数。 + +###### 第35题 + +**答案:** `count < m` + +**解析:** 若总长度仍小于所需段数 `m`,则即使每段仅长 $1$ 也无法满足要求,应判定失败。 + +###### 第36题 + +**答案:** `lbound < ubound` + +**解析:** 候选上下界尚未重合时继续二分,故条件为 `lboundCSP-J 初赛模拟卷(第 05 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | A | D | A | B | C | D | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | A | B | C | D | C | C | + +**逐题解析** + +##### 第1题 + +**答案:** B + +**解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。 + +##### 第2题 + +**答案:** A + +**解析:** 一个字节为 $8$ 位,因此 $32$ 位整型变量占 $32/8=4$ 个字节。 + +##### 第3题 + +**答案:** D + +**解析:** 前三项均等于十进制 $617$:$(269)_{16}=617$,$(1151)_8=617$。而 $(1001101011)_2=512+64+32+8+2+1=619$,因此 D 不同。 + +##### 第4题 + +**答案:** A + +**解析:** 各层结点数依次为 $1,k,k^2,\ldots,k^h$,相加得到等比数列和 $1+k+\cdots+k^h=(k^{h+1}-1)/(k-1)$。 + +##### 第5题 + +**答案:** B + +**解析:** `s` 初始为 `a`,循环共执行 `c` 次,每次加 $1$,所以结束后 `s=a+c`。 + +##### 第6题 + +**答案:** C + +**解析:** 共有 $2048\times1024$ 个像素,每个像素占 $32/8=4$ 字节。总空间为 $2048\times1024\times4=8\times1024^2$ 字节,即 $8\ \mathrm{MB}$。 + +##### 第7题 + +**答案:** D + +**解析:** 由握手定理,所有顶点的度数之和为边数的两倍。设顶点数为 $n$,则 $2n=2\times16$,得到 $n=16$。 + +##### 第8题 + +**答案:** C + +**解析:** `1` 和 `n` 都是整数,因此 `1/n` 执行整数除法;当 `n>1` 时结果为 $0$。应将分子写为 `1.0` 等浮点数,才能得到所需的小数值。 + +##### 第9题 + +**答案:** B + +**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。 + +##### 第10题 + +**答案:** A + +**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。 + +##### 第11题 + +**答案:** B + +**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。 + +##### 第12题 + +**答案:** C + +**解析:** IPv4 地址的每一段为 $8$ 位,取值范围是 $0$ 至 $255$。选项 C 中出现了 `256`,超出了该范围。 + +##### 第13题 + +**答案:** D + +**解析:** 寄存器位于 CPU 内部,用于暂存操作数、地址及中间结果,是 CPU 的重要组成部分。 + +##### 第14题 + +**答案:** C + +**解析:** POP3、SMTP、IMAP 均用于电子邮件的发送或接收;WTO 是世界贸易组织的英文缩写,不是电子邮件协议。 + +##### 第15题 + +**答案:** C + +**解析:** 采用流水作业:第一道菜在 $30$ 分钟完成,后两道菜各间隔 $10$ 分钟完成。总用时为 $30+10+10=50$ 分钟。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** `encoder` 先放入 `C、S、P`,再按字母序补齐其余字母;`decoder` 是其逆映射。程序把输入字母按这张逆映射表逐个替换。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | × | √ | × | A | D | + +###### 第16题 + +**答案:** √(正确) + +**解析:** 下标为 `st[i]-'A'`,只有大写字母才能保证下标位于 $0$ 至 $25$ 之间。 + +###### 第17题 + +**答案:** ×(错误) + +**解析:** 并非每个字母都会变化,例如字母 `Z` 的映射仍为 `Z`,输入 `Z` 就与输出相同。 + +###### 第18题 + +**答案:** √(正确) + +**解析:** 需要检查是否预先出现的特殊字母 `C、S、P` 都在前三个位置;后续补入的字母小于当前枚举字母,不会造成遗漏,因此修改该检查上界不影响结果。 + +###### 第19题 + +**答案:** ×(错误) + +**解析:** 只建立前 $16$ 个位置的逆映射会漏掉后续字母,部分输入无法被正确还原,输出可能改变。 + +###### 第20题 + +**答案:** A + +**解析:** 要输出 `A、B、C`,输入应分别是 `encoder[0..2]`,即 `C、S、P`,因此输入既有 `S` 又有 `P`。 + +###### 第21题 + +**答案:** D + +**解析:** 输出 `C、S、P` 分别对应输入 `P、R、N`,所以输入既没有 `S`,也没有 `A`。 + +##### 程序(2) + +**程序分析:** 对每个位置 `i`,程序输出从该位置向右、连续元素均不大于 `a[i]` 的最远端点 `ans`。若当前值比前一个值小,则重新从 `i` 开始寻找。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | √ | D | A | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** `ans` 至少等于 `i`,但可能恰好等于 `i`;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 只有在 `ansA[p-1].b`) + +**解析:** 已保留区间的右端点严格递增;只有当前右端点大于最后保留区间的右端点时,才有保留价值。 + +###### 第37题 + +**答案:** A(`q+1CSP-J 初赛模拟卷(第 06 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | D | D | C | A | A | B | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | A | B | D | D | C | C | + +**逐题解析** + +##### 第1题 + +**答案:** B + +**解析:** NOI 是全国青少年信息学奥林匹克竞赛的英文简称。 + +##### 第2题 + +**答案:** D + +**解析:** 按题目采用的 $1024$ 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。 + +##### 第3题 + +**答案:** D + +**解析:** 将两个二进制数对齐后逐位进行与运算,只有两位均为 $1$ 时结果才为 $1$,得到 `01 0010 1000 0011`。 + +##### 第4题 + +**答案:** C + +**解析:** 根深度为 $1$ 时,深度为 $h$ 的二叉树至多有 $2^{h-1}$ 个叶结点。$2^{10}=1024<2011\le2048=2^{11}$,所以最小深度为 $12$。 + +##### 第5题 + +**答案:** A + +**解析:** 单峰数组可用二分法寻找峰顶:先检查中间位置是否同时大于两侧元素;若不是,则沿数值上升的方向缩小搜索区间。按该控制流程,三段代码的执行顺序为 `c、a、b`。 + +##### 第6题 + +**答案:** A + +**解析:** 先给每个班分配一个名额,再将剩余 $3$ 个相同名额分给 $7$ 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。 + +##### 第7题 + +**答案:** B + +**解析:** 生成树包含原图全部 $6$ 个顶点,而任意 $n$ 个顶点的树均有 $n-1$ 条边,因此边数为 $5$。 + +##### 第8题 + +**答案:** C + +**解析:** 对非负的 `x`,先乘 $100$,加 $0.5$ 后转为整数以完成四舍五入,再除以 `100.0` 恢复数量级,对应选项 C。 + +##### 第9题 + +**答案:** D + +**解析:** 两个数分别为十进制 $36$ 和 $20$,相加为 $56$,对应的 8 位二进制表示是 `00111000`。 + +##### 第10题 + +**答案:** A + +**解析:** 字符串是由字符组成的特殊线性表,可以用数组存储;长度可以为零。含空格字符的串仍含有元素,不是空串。 + +##### 第11题 + +**答案:** B + +**解析:** 队列在队尾插入、队头删除,遵循先进先出原则。 + +##### 第12题 + +**答案:** D + +**解析:** 代入给定布尔值后,A、B、C 均为假;D 中 $x\land y$ 为真,因此整个逻辑或表达式为真。 + +##### 第13题 + +**答案:** D + +**解析:** 打印机将计算机处理结果输出为纸质内容,属于输出设备。 + +##### 第14题 + +**答案:** C + +**解析:** “复制”将所选文件的信息放入剪贴板,以供后续粘贴操作使用,同时保留原位置的文件。 + +##### 第15题 + +**答案:** C + +**解析:** 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le iCSP-J 初赛模拟卷(第 07 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | D | A | A | A | C | C | A | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | B | C | A | C | B | A | + +**逐题解析** + +##### 第1题 + +**答案:** A + +**解析:** 早期电子计算机首先用于科学与工程中的数值计算,例如数值表和复杂算式的计算。 + +##### 第2题 + +**答案:** D + +**解析:** 将两个二进制数对齐后逐位进行与运算,只有两位均为 $1$ 时结果才为 $1$,得到 `01 0010 1000 0011`。 + +##### 第3题 + +**答案:** A + +**解析:** 存储单元的唯一标识称为地址,CPU 根据地址读写相应的存储单元。 + +##### 第4题 + +**答案:** A + +**解析:** 每两轮形成 `ASDFasdf` 的 $8$ 字符循环。$81\bmod8=1$,因此第 $81$ 个字符是大写 `A`。 + +##### 第5题 + +**答案:** A + +**解析:** 所需空间为 $800\times600\times16/8=960000$ 字节,即 $960000/1024=937.5\ \mathrm{KB}$。 + +##### 第6题 + +**答案:** C + +**解析:** 先将第一个数作为当前最大值,再依次与其余 $N-1$ 个数比较。每次比较至多排除一个候选最大值,因此至少需要 $N-1$ 次比较。 + +##### 第7题 + +**答案:** C + +**解析:** 在题目的理论模型中,机器字长和地址宽度不同,会导致可寻址空间不同;显示器、硬盘容量和输入法不由 32 位或 64 位这一分类直接决定。 + +##### 第8题 + +**答案:** A + +**解析:** 按边数分类:$3$ 条边时有路径和星形两种,$4$ 条边时有四边形和三角形带一条悬挂边两种,$5$ 条边和 $6$ 条边时各一种,共 $2+2+1+1=6$ 种。 + +##### 第9题 + +**答案:** C + +**解析:** 最少比较次数出现在输入数组已经有序时:第一趟比较 $n-1$ 对相邻元素,没有交换,随后外层循环结束。 + +##### 第10题 + +**答案:** B + +**解析:** 先计算 `b+c`,其后缀表达式为 `bc+`;再与 `a` 相乘,最后与 `d` 相乘,得到 `abc+*d*`。 + +##### 第11题 + +**答案:** C + +**解析:** 从根开始依次沿右孩子到达图中最右下结点,其下标依次为 $1,3,7,15$,所以数组最大下标至少为 $15$。 + +##### 第12题 + +**答案:** A + +**解析:** $13=8+4+1=(1101)_2$,$0.375=1/4+1/8=(0.011)_2$,合并得到 $(1101.011)_2$。 + +##### 第13题 + +**答案:** C + +**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。 + +##### 第14题 + +**答案:** B + +**解析:** `x & (x-1)` 每次恰好清除二进制表示中最右侧的一个 `1`。循环次数因此等于 `1` 的个数,所填语句为 `x &= x - 1`。 + +##### 第15题 + +**答案:** A + +**解析:** CPU 负责执行运算和控制程序运行。易失性存储器断电后可能丢失数据,屏幕尺寸与分辨率不具有一一对应关系,接入互联网也不限于 Wi-Fi。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 对每个位置 `i`,程序输出从该位置向右、连续元素均不大于 `a[i]` 的最远端点 `ans`。若当前值比前一个值小,则重新从 `i` 开始寻找。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | √ | D | A | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** `ans` 至少等于 `i`,但可能恰好等于 `i`;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 只有在 `ansCSP-J 初赛模拟卷(第 08 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | B | D | A | A | A | A | B | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | C | B | B | D | C | A | + +**逐题解析** + +##### 第1题 + +**答案:** D + +**解析:** 蓝牙、Wi-Fi 和 GPRS 均属于无线通信技术;本题中的以太网指常见的有线局域网技术。 + +##### 第2题 + +**答案:** B + +**解析:** 8 位补码的最高位为符号位。该数表示的十进制值为 $-2^7+2^5+2^3+2^1+2^0=-128+32+8+2+1=-85$。 + +##### 第3题 + +**答案:** D + +**解析:** 光盘、磁盘和固态硬盘均可保存数据;鼠标用于输入操作信息,不属于存储设备。 + +##### 第4题 + +**答案:** A + +**解析:** 编译器将源程序翻译为目标代码,供计算机进一步链接或执行,本题对应将源程序翻译成机器指令代码。 + +##### 第5题 + +**答案:** A + +**解析:** `s` 先被赋为 `a`,随后循环执行 `c` 次减一操作,因此最终为 `s=a-c`。 + +##### 第6题 + +**答案:** A + +**解析:** 将元素两两分组,先比较每组大小,再分别在较大元素中找最大值、在较小元素中找最小值,最坏情况下共需 $\lceil3N/2\rceil-2$ 次比较。 + +##### 第7题 + +**答案:** A + +**解析:** 三个数字各不相同时有 $3!=6$ 种。数字 `1` 出现两次时,另一位可选 `2` 或 `3`,共 $2\times3=6$ 种;数字 `2` 出现两次时同样有 $6$ 种。合计 $18$ 种。 + +##### 第8题 + +**答案:** B + +**解析:** 先令新结点的 `next` 指向原栈顶 `hs`,再令 `hs` 指向新结点 `s`,即依次执行 `s->next=hs; hs=s;`。 + +##### 第9题 + +**答案:** D + +**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。 + +##### 第10题 + +**答案:** C + +**解析:** 球和袋子都不可区分,等价于将 $8$ 分拆为至多 $5$ 个正整数。按非空袋子数 $1,2,3,4,5$ 分类,分别有 $1,4,5,5,3$ 种,共 $18$ 种。 + +##### 第11题 + +**答案:** B + +**解析:** 高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。因为 $32\le61\le63$,所以高度为 $6$。 + +##### 第12题 + +**答案:** B + +**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。 + +##### 第13题 + +**答案:** D + +**解析:** 前两轮只将 `n` 增加到 $1$、$2$。第三轮 `n=3`,满足 `n%3==0`,执行 `k--` 后 `k=3`;循环条件 `n1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | D | B | D | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。 + +###### 第23题 + +**答案:** ×(错误) + +**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le nCSP-J 初赛模拟卷(第 09 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | A | B | C | D | A | A | A | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | C | B | C | B | B | C | + +**逐题解析** + +##### 第1题 + +**答案:** D + +**解析:** C 语言属于过程式程序设计语言;其余选项中的 C++、Python 和 Java 均支持面向对象程序设计。 + +##### 第2题 + +**答案:** A + +**解析:** 存储单元的唯一标识称为地址,CPU 根据地址读写相应的存储单元。 + +##### 第3题 + +**答案:** B + +**解析:** 广域网的英文为 Wide Area Network,缩写为 WAN;LAN 和 MAN 分别表示局域网和城域网。 + +##### 第4题 + +**答案:** C + +**解析:** 共有 $2048\times1024$ 个像素,每个像素占 $32/8=4$ 字节。总空间为 $2048\times1024\times4=8\times1024^2$ 字节,即 $8\ \mathrm{MB}$。 + +##### 第5题 + +**答案:** D + +**解析:** 若先输出 `c`、`d`,则 `a`、`b` 仍在栈中,且 `b` 位于 `a` 上方。在输出 `a` 之前必须先输出 `b`,因此 `c,d,a,e,b` 不合法。 + +##### 第6题 + +**答案:** A + +**解析:** 折半查找每次将候选范围约减半,最坏比较次数为 $\lfloor\log_2 100\rfloor+1=7$。 + +##### 第7题 + +**答案:** A + +**解析:** 含 $n$ 个顶点的连通无向图至少有 $n-1$ 条边;取一棵生成树即可达到这个最小值。因此 $10$ 个顶点可用 $9$ 条边构成连通图。 + +##### 第8题 + +**答案:** A + +**解析:** 先给每个班分配一个名额,再将剩余 $3$ 个相同名额分给 $7$ 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。 + +##### 第9题 + +**答案:** B + +**解析:** 高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。因为 $32\le61\le63$,所以高度为 $6$。 + +##### 第10题 + +**答案:** C + +**解析:** 球和袋子都不可区分,等价于将 $8$ 分拆为至多 $5$ 个正整数。按非空袋子数 $1,2,3,4,5$ 分类,分别有 $1,4,5,5,3$ 种,共 $18$ 种。 + +##### 第11题 + +**答案:** B + +**解析:** 哈夫曼算法每次选择当前权值最小的两个结点合并,以局部最优选择构造整体最优编码树,属于贪心策略。 + +##### 第12题 + +**答案:** C + +**解析:** 递归展开为 $7\times\operatorname{solve}(5)=7\times5\times\operatorname{solve}(3)=7\times5\times3\times2=210$。 + +##### 第13题 + +**答案:** B + +**解析:** 从 `a` 出发的深度优先搜索,最后访问的顶点可以是 `b` 或 `e`,其余两点均不能成为最后访问的顶点,因此共有 $2$ 个。 + +##### 第14题 + +**答案:** B + +**解析:** 安排用时为 $1$、$2$ 的两人先过河,用时 $1$ 的人返回;再让用时 $4$、$8$ 的两人过河,用时 $2$ 的人返回;最后前两人一起过河。总时间为 $2+1+8+2+2=15$。 + +##### 第15题 + +**答案:** C + +**解析:** 由辗转相除法,$377=319+58$,$319=5\times58+29$,$58=2\times29$,所以最大公约数为 $29$。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | √ | B | B | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。 + +###### 第18题 + +**答案:** ×(错误) + +**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。 + +###### 第20题 + +**答案:** B + +**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。 + +###### 第21题 + +**答案:** B + +**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。 + +##### 程序(2) + +**程序分析:** 对每个位置 `i`,程序输出从该位置向右、连续元素均不大于 `a[i]` 的最远端点 `ans`。若当前值比前一个值小,则重新从 `i` 开始寻找。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | √ | D | A | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** `ans` 至少等于 `i`,但可能恰好等于 `i`;例如严格递增序列中每次输出就是当前位置,因此不保证严格大于。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 只有在 `ans 0` | +| 36 | `result * x % m` | +| 37 | `x * x % m` | +| 38 | `result` | + +###### 第34题 + +**答案:** `1` + +**解析:** 乘法的单位元为 $1$,因此结果累加器初始化为 `1`。 + +###### 第35题 + +**答案:** `p > 0` + +**解析:** 指数尚未全部处理时继续循环,条件为 `p>0`。 + +###### 第36题 + +**答案:** `result * x % m` + +**解析:** 当当前二进制位为 $1$ 时,应执行 `result=result*x%m`。 + +###### 第37题 + +**答案:** `x * x % m` + +**解析:** 指数每次除以二,底数需相应平方并取模,即 `x*x%m`。 + +###### 第38题 + +**答案:** `result` + +**解析:** 最终所求余数保存在 `result` 中,直接输出即可。 + +##### 程序(2) + +**程序分析:** 程序模拟编号为 $0$ 至 $n-1$ 的约瑟夫环,每隔一名存活者淘汰一人。`F` 标记淘汰状态,`c` 记录已淘汰人数,`p` 在存活者之间交替计数。 + +**答案速查** + +| 题号 | 39 | 40 | 41 | 42 | 43 | +| :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | C | C | D | B | + +###### 第39题 + +**答案:** D(`c < n - 1`) + +**解析:** 保留一人时结束,因此循环条件为 `cCSP-J 初赛模拟卷(第 10 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | A | B | D | A | B | D | A | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | A | A | B | B | C | C | + +**逐题解析** + +##### 第1题 + +**答案:** B + +**解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。 + +##### 第2题 + +**答案:** A + +**解析:** 计算机使用二进制的 `0` 和 `1` 表示、存储及处理数据,字符、图像等信息也需先编码为二进制。 + +##### 第3题 + +**答案:** B + +**解析:** 图灵奖是计算机科学领域的重要奖项;其余奖项分别主要面向电影、自然科学及文学等领域、新闻等领域。 + +##### 第4题 + +**答案:** D + +**解析:** 前三项均等于十进制 $617$:$(269)_{16}=617$,$(1151)_8=617$。而 $(1001101011)_2=512+64+32+8+2+1=619$,因此 D 不同。 + +##### 第5题 + +**答案:** A + +**解析:** 链表元素的存储位置不必连续,访问第 $i$ 个元素通常需要沿指针依次查找,因此不支持像数组那样按下标直接随机访问任一元素。 + +##### 第6题 + +**答案:** B + +**解析:** 故事内容不断包含与自身结构相同的子故事,对应函数在执行过程中调用自身的递归思想。 + +##### 第7题 + +**答案:** D + +**解析:** 有 $n$ 个顶点的树恰有 $n-1$ 条边。原图有 $m$ 条边,保留一棵生成树后需删除 $m-(n-1)=m-n+1$ 条边。 + +##### 第8题 + +**答案:** A + +**解析:** 将双胞胎视为一个整体,与其余 $3$ 人共形成 $4$ 个排列单位,有 $4!$ 种;双胞胎内部还有 $2!$ 种顺序,共 $4!\times2!=48$ 种。 + +##### 第9题 + +**答案:** A + +**解析:** 高度为 $5$ 时,前 $4$ 层必须填满,最后一层可从左到右放置 $1$ 至 $16$ 个结点。结点数确定后形态唯一,因此有 $16$ 种形态。 + +##### 第10题 + +**答案:** A + +**解析:** 先从 $5$ 种颜色中选出形成完整手套的 $2$ 种,再从剩余 $3$ 种中选出 $2$ 种,各取一只。单只手套分别有左右手两种选择,因此共有 $\binom52\binom32\times2^2=120$ 种。 + +##### 第11题 + +**答案:** A + +**解析:** 若四种花色各至多取 $3$ 张,则总数至多为 $12$ 张。现取 $13$ 张,根据抽屉原理,至少有一种花色取到 $4$ 张。 + +##### 第12题 + +**答案:** B + +**解析:** 递归先求前 $n-1$ 个元素的最小值,再与第 $n$ 个元素比较并返回较小者,因此最终返回整个数组的最小值。 + +##### 第13题 + +**答案:** B + +**解析:** 后序遍历末尾的 `A` 为根;用中序遍历划分左右子树,再递归确定各子树根结点,可得前序遍历为 `ABDEGHJCFI`。 + +##### 第14题 + +**答案:** C + +**解析:** 首尾两位及第二、四位分别可取 `00`、`11`、`88`、`69`、`96`,各有 $5$ 种选择;中间一位只能取 `0`、`1`、`8`。共有 $5\times5\times3=75$ 种。 + +##### 第15题 + +**答案:** C + +**解析:** 根下标为 $1$,图中连续三次取右孩子得到下标 $1\to3\to7\to15$,所以最大下标至少为 $15$。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** `encoder` 先放入 `C、S、P`,再按字母序补齐其余字母;`decoder` 是其逆映射。程序把输入字母按这张逆映射表逐个替换。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | × | √ | × | A | D | + +###### 第16题 + +**答案:** √(正确) + +**解析:** 下标为 `st[i]-'A'`,只有大写字母才能保证下标位于 $0$ 至 $25$ 之间。 + +###### 第17题 + +**答案:** ×(错误) + +**解析:** 并非每个字母都会变化,例如字母 `Z` 的映射仍为 `Z`,输入 `Z` 就与输出相同。 + +###### 第18题 + +**答案:** √(正确) + +**解析:** 需要检查是否预先出现的特殊字母 `C、S、P` 都在前三个位置;后续补入的字母小于当前枚举字母,不会造成遗漏,因此修改该检查上界不影响结果。 + +###### 第19题 + +**答案:** ×(错误) + +**解析:** 只建立前 $16$ 个位置的逆映射会漏掉后续字母,部分输入无法被正确还原,输出可能改变。 + +###### 第20题 + +**答案:** A + +**解析:** 要输出 `A、B、C`,输入应分别是 `encoder[0..2]`,即 `C、S、P`,因此输入既有 `S` 又有 `P`。 + +###### 第21题 + +**答案:** D + +**解析:** 输出 `C、S、P` 分别对应输入 `P、R、N`,所以输入既没有 `S`,也没有 `A`。 + +##### 程序(2) + +**程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | √ | C | C | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。 + +###### 第23题 + +**答案:** ×(错误) + +**解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。 + +###### 第25题 + +**答案:** √(正确) + +**解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。 + +###### 第26题 + +**答案:** C + +**解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。 + +###### 第27题 + +**答案:** C + +**解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。 + +##### 程序(3) + +**程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | × | C | D | + +###### 第28题 + +**答案:** ×(错误) + +**解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。 + +###### 第29题 + +**答案:** √(正确) + +**解析:** 程序包含整数除法和取模,除数 `m` 必须非零。 + +###### 第30题 + +**答案:** √(正确) + +**解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。 + +###### 第31题 + +**答案:** ×(错误) + +**解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。 + +###### 第32题 + +**答案:** C + +**解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。 + +###### 第33题 + +**答案:** D + +**解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。 + +#### **三、完善程序** + +##### 程序(1) + +**程序分析:** 程序排序后,用资金最多的候选同学与价格最低的自行车配对,累计各人的不足金额,判断公共预算能否补足;再二分求最多可租车的人数。函数参数 `nn` 为本次待检验人数。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 34 | `n-nn+1` | +| 35 | `M[i] < C[j]` | +| 36 | `count <= A` | +| 37 | `check(mid)` | +| 38 | `mid-1` | + +###### 第34题 + +**答案:** `n-nn+1` + +**解析:** 应选取排序后资金最多的 `nn` 人,其第一人的下标是 `n-nn+1`。 + +###### 第35题 + +**答案:** `M[i] < C[j]` + +**解析:** 只有自行车价格高于该同学已有资金时才需公共预算补足,即判断 `M[i]=0 && y>=0 && x=0 && y>=0 && xCSP-J 初赛模拟卷(第 11 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | C | B | C | A | D | A | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | D | C | D | B | A、B、B、B | A | + +**逐题解析** + +##### 第1题 + +**答案:** D + +**解析:** 按题目采用的 $1024$ 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。 + +##### 第2题 + +**答案:** C + +**解析:** PENTIUM(奔腾)、酷睿和赛扬均为 CPU 的产品系列或型号名称。 + +##### 第3题 + +**答案:** B + +**解析:** 全国青少年计算机程序设计竞赛(NOI)由中国计算机学会于 1984 年创办。 + +##### 第4题 + +**答案:** C + +**解析:** Photoshop 是图像编辑应用软件;Windows、DOS 和 NOI Linux 均属于操作系统。 + +##### 第5题 + +**答案:** A + +**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。 + +##### 第6题 + +**答案:** D + +**解析:** 蓝牙、Wi-Fi 和 GPRS 均属于无线通信技术;本题中的以太网指常见的有线局域网技术。 + +##### 第7题 + +**答案:** A + +**解析:** 图灵奖用于表彰对计算机科学作出重要贡献的人物,是计算机科学领域的最高荣誉之一。 + +##### 第8题 + +**答案:** C + +**解析:** $(101.11)_2=2^2+2^0+2^{-1}+2^{-2}=4+1+0.5+0.25=5.75$。 + +##### 第9题 + +**答案:** A + +**解析:** 先给每个班分配一个名额,再将剩余 $3$ 个相同名额分给 $7$ 个不同班级。由隔板法,方案数为 $\binom{3+7-1}{7-1}=\binom96=84$。 + +##### 第10题 + +**答案:** D + +**解析:** 8 位无符号整数的范围是 $0$ 至 $2^8-1=255$。选项中能表示的数为 $133$ 和 $199$,其中较大的是 $199$。 + +##### 第11题 + +**答案:** C + +**解析:** 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。 + +##### 第12题 + +**答案:** D + +**解析:** 拓扑序列的第一个顶点不能有尚未排列的前驱,因此其原始入度必须为 $0$。有环图不存在拓扑序,拓扑序也不一定唯一;原始入度的大小不能决定所有顶点的排列先后。 + +##### 第13题 + +**答案:** B + +**解析:** 因特网源于计算机通信、分组交换和网络协议等技术的发展,并不是通过研究蜘蛛网而发明的,因此 B 的说法错误。 + +##### 第14题 + +**答案:** (1)A;(2)B;(3)B;(4)B。 + +**解析:** 丙去了,由③知丁没去;由②的逆否命题知乙没去。结合④及丙去了,可推出甲去了。再结合①和乙没去,可推出周末没下雨。因此四空依次为 A、B、B、B。 + +##### 第15题 + +**答案:** A + +**解析:** 搜索过程中尝试构造解,在当前选择不能满足条件时撤销该选择并返回上一步继续尝试,这正是回溯法的基本过程。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 按题目采用的 32 位补码整数模型,`f(x)` 统计二进制表示中 `1` 的个数,`g(x)=x&(-x)` 提取最低位的 `1` 所代表的数值;程序输出二者之和。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | × | √ | × | B | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** 数组 `a[1000]` 的合法下标是 $0$ 至 $999$。输入 $n=1001$ 时会访问 `a[1000]`,发生越界。 + +###### 第17题 + +**答案:** ×(错误) + +**解析:** 零也是反例:`f(0)` 的循环一次也不执行,`g(0)=0`,程序不会因此陷入死循环。 + +###### 第18题 + +**答案:** ×(错误) + +**解析:** 样例中的最后一个数为 $10$,其二进制为 `1010`,故 `f(10)=2`、`g(10)=2`,最后应输出 $4$,而不是 $5$。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** $511998$ 的二进制表示有 $16$ 个 `1`,最低位的 `1` 代表 $2$,因此输出 $16+2=18$。 + +###### 第20题 + +**答案:** ×(错误) + +**解析:** 将 `g` 的定义移到 `main` 后面时,需先在调用前提供函数声明;否则编译器在调用处尚不知道 `g`。 + +###### 第21题 + +**答案:** B + +**解析:** 32 位补码下,$-65536$ 的二进制表示有 $16$ 个 `1`,最低位的 `1` 为 $65536$,输出 $65552$;$2147483647=2^{31}-1$,输出 $31+1=32$。 + +##### 程序(2) + +**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | × | × | × | A | A | + +###### 第22题 + +**答案:** √(正确) + +**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。 + +###### 第23题 + +**答案:** ×(错误) + +**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。 + +###### 第24题 + +**答案:** ×(错误) + +**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。 + +###### 第25题 + +**答案:** ×(错误) + +**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x lbound` | +| 35 | `count = 0` | +| 36 | `x[i] > mid` | +| 37 | `count++` | +| 38 | `rbound = mid` | + +###### 第34题 + +**答案:** `rbound > lbound` + +**解析:** 当左右边界尚未重合时继续二分,条件为 `rbound>lbound`。 + +###### 第35题 + +**答案:** `count = 0` + +**解析:** 每次更换候选值后,应重新统计,令 `count=0`。 + +###### 第36题 + +**答案:** `x[i] > mid` + +**解析:** 应统计严格大于 `mid` 的数,即 `x[i]>mid`。若用 `>=`,例如序列 `1,2,3` 会错误地把答案推到 $3$。 + +###### 第37题 + +**答案:** `count++` + +**解析:** 每发现一个满足条件的元素,就使计数加一,执行 `count++`。 + +###### 第38题 + +**答案:** `rbound = mid` + +**解析:** 严格大于 `mid` 的元素不超过一半时,中位数至多为 `mid`,应执行 `rbound=mid`。 + +##### 程序(2) + +**程序分析:** 递归函数为每个子树维护允许的开区间 `(lower_bound,upper_bound)`。当前值必须落在该区间中;左子树上界改为当前值,右子树下界改为当前值,从而验证严格二叉搜索树。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 39 | `cur < upper_bound` | +| 40 | `a[root].right_child` | +| 41 | `cur` | +| 42 | `upper_bound` | +| 43 | `1` | + +###### 第39题 + +**答案:** `cur < upper_bound` + +**解析:** 已检查 `cur>lower_bound`,还需检查 `curCSP-J 初赛模拟卷(第 12 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | B | B | C | D | D | B | A | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | D | C | C | A | A | + +**逐题解析** + +##### 第1题 + +**答案:** C + +**解析:** 操作系统负责管理 CPU、内存、外部设备等硬件资源,并为程序运行和用户操作提供统一的管理与服务。 + +##### 第2题 + +**答案:** B + +**解析:** NOI 是全国青少年信息学奥林匹克竞赛的英文简称。 + +##### 第3题 + +**答案:** B + +**解析:** 队列在队尾插入、队头删除,遵循先进先出原则。 + +##### 第4题 + +**答案:** C + +**解析:** $b$ 位二进制最多表示 $2^b$ 种状态。因为 $2^8=256$,所以至少需要 $8$ 位。 + +##### 第5题 + +**答案:** D + +**解析:** A、B、C 均含有与假值 $z$ 的逻辑与,因此为假。D 中 $x\land y$ 为真,逻辑或的结果为真。 + +##### 第6题 + +**答案:** D + +**解析:** $(269)_{16}=(617)_{10}=(1151)_8=617$,而 $(1001101011)_2=619$,所以 D 与其余三项不同。 + +##### 第7题 + +**答案:** B + +**解析:** 按“操作数在前、运算符在后”的规则,`b+c` 写作 `bc+`,再依次与 `a`、`d` 相乘,得到 `abc+*d*`。 + +##### 第8题 + +**答案:** A + +**解析:** 若四种花色各至多取 $3$ 张,则总数至多为 $12$ 张。现取 $13$ 张,根据抽屉原理,至少有一种花色取到 $4$ 张。 + +##### 第9题 + +**答案:** D + +**解析:** 前序顺序为“根、左、右”,中序顺序为“左、根、右”。要使两者相同,每个结点都不能有左子树;因此只含根结点或仅沿右孩子延伸的二叉树符合条件。 + +##### 第10题 + +**答案:** D + +**解析:** 按根下标为 $1$、右孩子下标为 $2i+1$ 的规则,图中最右下结点的下标为 $1\to3\to7\to15$,所以最大下标为 $15$。 + +##### 第11题 + +**答案:** C + +**解析:** 只含一种字母的不同非空子串有 $3\times3=9$ 个;跨越 `A/B` 或 `B/C` 边界的各有 $3\times3=9$ 个;同时含 `A、B、C` 的有 $3\times3=9$ 个。共 $9+9+9+9=36$ 个。 + +##### 第12题 + +**答案:** C + +**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。 + +##### 第13题 + +**答案:** A + +**解析:** 将连通图保留为一棵生成树后,边数由 $m$ 变为 $n-1$,需删除 $m-n+1$ 条边。 + +##### 第14题 + +**答案:** A + +**解析:** 删除 `p` 时,应把前驱的后继指向 `p` 的后继,把后继的前驱指向 `p` 的前驱。A 却让这两个相邻结点的相应指针分别指向自身,不能正确连接链表。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。 + +**答案速查** + +| 题号 | 15 | 16 | 17 | 18 | 19 | 20 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | √ | D | B | + +###### 第15题 + +**答案:** ×(错误) + +**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。 + +###### 第16题 + +**答案:** √(正确) + +**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。 + +###### 第17题 + +**答案:** ×(错误) + +**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。 + +###### 第18题 + +**答案:** √(正确) + +**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。 + +###### 第19题 + +**答案:** D + +**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。 + +###### 第20题 + +**答案:** B + +**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。 + +##### 程序(2) + +**程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。 + +**答案速查** + +| 题号 | 21 | 22 | 23 | 24 | 25 | 26 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | √ | C | C | + +###### 第21题 + +**答案:** ×(错误) + +**解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。 + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。 + +###### 第25题 + +**答案:** C + +**解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。 + +###### 第26题 + +**答案:** C + +**解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。 + +##### 程序(3) + +**程序分析:** `a[x]=y` 与 `b[y]=x` 维护两侧结点的一一配对,冲突配对会先解除。最后分别统计两数组中的零元素;若当前有 $t$ 对配对,输出为 $2n-2t$。 + +**答案速查** + +| 题号 | 27 | 28 | 29 | 30 | 31 | 32 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | × | × | × | A | A | + +###### 第27题 + +**答案:** √(正确) + +**解析:** 第一对正编号结点必定可以配对,之后的更新不会使配对总数降为零,因此 $m>0$ 时最终至少有一对,输出小于 $2n$。 + +###### 第28题 + +**答案:** ×(错误) + +**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。 + +###### 第29题 + +**答案:** ×(错误) + +**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。 + +###### 第30题 + +**答案:** ×(错误) + +**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `x1`) + +**解析:** 若试除后 `n>1`,说明仍剩一个质因子,需要单独输出。 + +###### 第37题 + +**答案:** C(`n`) + +**解析:** 最后剩下的质因子就是当前的 `n`,应输出 `n`。 + +##### 程序(2) + +**程序分析:** 程序成对枚举 $n$ 的正约数,避免平方根重复加入;随后对每两个不同约数求最大公约数并累加,对 $10007$ 取模。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 38 | `i*i` | +| 39 | `n/i` | +| 40 | `return a` | +| 41 | `a%b` | +| 42 | `ans + gcd(a[i], a[j])` | + +###### 第38题 + +**答案:** `i*i` + +**解析:** 枚举到 $\sqrt n$ 即可找到所有约数对,条件写为 `i*i<=n`。 + +###### 第39题 + +**答案:** `n/i` + +**解析:** 一对约数为 `i` 与 `n/i`。只有 `n/i!=i` 时才需再加入另一个,避免完全平方数的平方根重复。 + +###### 第40题 + +**答案:** `return a` + +**解析:** 欧几里得算法中,当第二个参数为零时,第一个参数就是最大公约数,应执行 `return a`。 + +###### 第41题 + +**答案:** `a%b` + +**解析:** 递推式为 `gcd(a,b)=gcd(b,a%b)`,第二个参数应为 `a%b`。 + +###### 第42题 + +**答案:** `ans + gcd(a[i], a[j])` + +**解析:** 当前约数对的贡献为 `gcd(a[i],a[j])`,应在原 `ans` 上累加后再取模。 + +##### 程序(3) + +**程序分析:** 程序对可切出的整数长度进行二分。长度为 `mid` 时,第 `i` 根绳子可切出 `len[i]/mid` 段;总段数随候选长度增大而不增加,满足二分判定的单调性。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 43 | `count = count + len[i]` | +| 44 | `count < m` | +| 45 | `lbound < ubound` | +| 46 | `(lbound + ubound + 1) / 2` | +| 47 | `count = count + len[i] / mid` | + +###### 第43题 + +**答案:** `count = count + len[i]` + +**解析:** 先累加绳子总长度,等价于计算每段长度为 $1$ 时最多能切出的段数。 + +###### 第44题 + +**答案:** `count < m` + +**解析:** 若总长度仍小于所需段数 `m`,则即使每段仅长 $1$ 也无法满足要求,应判定失败。 + +###### 第45题 + +**答案:** `lbound < ubound` + +**解析:** 候选上下界尚未重合时继续二分,故条件为 `lboundCSP-J 初赛模拟卷(第 13 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | C | B | C | A | D | C | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | C | D | B | C | D | A | + +**逐题解析** + +##### 第1题 + +**答案:** C + +**解析:** ATM 密码验证依据用户掌握的密码信息,不利用人体的生理或行为特征,因此不属于生物特征识别。 + +##### 第2题 + +**答案:** C + +**解析:** 每 $4$ 位二进制数对应 $1$ 位十六进制数,因此 $100$ 位二进制正整数需 $\lceil100/4\rceil=25$ 位十六进制数表示。 + +##### 第3题 + +**答案:** B + +**解析:** C++ 支持类、对象、继承及多态等机制,是支持面向对象程序设计的高级语言。 + +##### 第4题 + +**答案:** C + +**解析:** Wi-Fi 主要用于无线局域网,使终端在较小范围内通过无线方式接入网络。 + +##### 第5题 + +**答案:** A + +**解析:** 选项 A 可化为 $P\lor[\neg P\land(Q\lor\neg Q)]=P\lor\neg P$,其值恒为真。 + +##### 第6题 + +**答案:** D + +**解析:** 降低浮点数精度时,舍入可能使数值变大、变小或保持不变,但不会把正数变为负数,或把负数变为正数。 + +##### 第7题 + +**答案:** C + +**解析:** 前缀表达式对应 $3+2\times(5+12)$,结果为 $3+34=37$。 + +##### 第8题 + +**答案:** C + +**解析:** 图灵奖是计算机科学领域的最高荣誉之一,本题对应选项 C。 + +##### 第9题 + +**答案:** C + +**解析:** 三人的选择相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。 + +##### 第10题 + +**答案:** C + +**解析:** 若先序遍历为 `ACB`,则根为 `A`。由中序遍历 `BAC` 可知 `B` 在左子树、`C` 在右子树,先序遍历必须先访问 `B` 再访问 `C`,与 `ACB` 矛盾。 + +##### 第11题 + +**答案:** D + +**解析:** 选项 D 对关键字 $2,6,10,17$ 分别得到地址 $1,2,3,4$,互不相同,因此不会产生冲突。 + +##### 第12题 + +**答案:** B + +**解析:** 先令 `s->next=hs`,将新结点接到原栈顶之前;再令 `hs=s`,使栈顶指针指向新结点。 + +##### 第13题 + +**答案:** C + +**解析:** 逆序排列的 $5$ 个数共有 $\binom52=10$ 个逆序对。冒泡排序每次相邻交换恰好减少一个逆序对,因此需要 $10$ 次交换。 + +##### 第14题 + +**答案:** D + +**解析:** 最坏情况下,两数组的元素交错出现。在已经确定前 $2n-1$ 个元素后,剩余最后一个元素可直接放入结果,因此最坏比较次数为 $2n-1$。 + +##### 第15题 + +**答案:** A + +**解析:** $A_1$ 的未访问邻接点为 $A_3$,深度优先搜索不能在访问 $A_1$ 后跳过 $A_3$ 而先访问 $A_2$,因此 A 不可能。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 程序枚举字符串长度 $n$ 的所有正因数 $i$,检查下标为 `i-1` 的字符,并对满足 `c>='a'` 的字符进行减去大小写编码差的转换。可能被修改的位置数等于 $n$ 的正因数个数。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | √ | B | B | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** `scanf("%s",st)` 可以读取不含空白的数字、标点等字符,并不限于大小写字母。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 当 `i=0` 时,第一次计算 `n%i` 就会出现除数为零的问题,因此程序不能正常执行。 + +###### 第18题 + +**答案:** ×(错误) + +**解析:** 将循环上界缩小到 $\sqrt n$ 后,会漏掉大于 $\sqrt n$ 的因数对应的位置,因此输出可能改变。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** 大写字母的编码均小于小写字母 `a`,不满足修改条件,因此字符串保持不变。 + +###### 第20题 + +**答案:** B + +**解析:** $18$ 的正因数为 $1,2,3,6,9,18$,共 $6$ 个;让这些位置都为小写字母即可使 $6$ 个字符发生变化。 + +###### 第21题 + +**答案:** B + +**解析:** $100000=2^5\times5^5$,正因数个数为 $(5+1)(5+1)=36$。其余三个长度的因数个数分别为 $9、1、8$。 + +##### 程序(2) + +**程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | × | C | D | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 程序包含整数除法和取模,除数 `m` 必须非零。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。 + +###### 第25题 + +**答案:** ×(错误) + +**解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。 + +###### 第26题 + +**答案:** C + +**解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。 + +###### 第27题 + +**答案:** D + +**解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。 + +##### 程序(3) + +**程序分析:** 程序随机选择枢轴,划分比枢轴小与不小的元素,并只递归进入包含第 $k$ 小值的部分,是快速选择算法。输入顺序不影响随机枢轴下的平均线性复杂度,但最坏情况仍可退化。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | B | B | A | D | + +###### 第28题 + +**答案:** ×(错误) + +**解析:** `rand()%(R-L+1)+L` 的取值范围为闭区间 $[L,R]$,包括左端点 `L`。 + +###### 第29题 + +**答案:** √(正确) + +**解析:** 两个指针相遇后有 `a==b`,相应位置的 `d[a]` 与 `d[b]` 相同,替换不会改变该判断。 + +###### 第30题 + +**答案:** B + +**解析:** 随机枢轴使平均递归规模按比例缩小,单次划分为线性时间,平均总时间为 $O(n)$。 + +###### 第31题 + +**答案:** B + +**解析:** 随机选择枢轴后,初始数组严格递减也不会使平均复杂度改变,仍为 $O(n)$。 + +###### 第32题 + +**答案:** A + +**解析:** 平均复杂度为 $O(n)$;最坏情况下每次仅排除一个元素,总代价为 $n+(n-1)+\cdots+1=O(n^2)$。 + +###### 第33题 + +**答案:** D + +**解析:** 全部元素相等时,划分不能有效均分。求第 $n$ 小值会逐次缩短一个元素,时间复杂度退化为 $O(n^2)$。 + +#### **三、完善程序** + +##### 程序(1) + +**程序分析:** 目标是把前 $p$ 个元素整体移到末尾,保持两部分各自顺序。第一种方法借助辅助数组直接映射位置;第二种方法反复把后半部分当前元素插到前面。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 34 | `n-p+i` | +| 35 | `a[i]` | +| 36 | `n` | +| 37 | `i-p+1` | +| 38 | `a[i-p]` | + +###### 第34题 + +**答案:** `n-p+i` + +**解析:** 前 $p$ 个元素应放到辅助数组的最后 $p$ 个位置,第 `i` 项的新位置为 `n-p+i`。 + +###### 第35题 + +**答案:** `a[i]` + +**解析:** 后半段第 `i` 项应复制原数组当前元素 `a[i]`,并放入 `b[i-p]`。 + +###### 第36题 + +**答案:** `n` + +**解析:** 辅助数组填完后,应把全部 $n$ 项复制回原数组,因此循环上界为 `n`。 + +###### 第37题 + +**答案:** `i-p+1` + +**解析:** 第 `i` 项要插入位置 `i-p`,需把 `i-p` 至 `i-1` 的元素右移一位,故倒序移动循环的下界为 `i-p+1`。 + +###### 第38题 + +**答案:** `a[i-p]` + +**解析:** 腾出的插入位置是 `i-p`,应把暂存值写入 `a[i-p]`。 + +##### 程序(2) + +**程序分析:** 程序离线按身高排序并建立双向链表,再按进入教室的逆序删除同学。处理第 `i` 人时,链表中保留的恰是此前进入者,最近身高只可能来自其有序前驱或后继。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 39 | `i <= j` | +| 40 | `next_pos[order[i]] = order[i+1]` | +| 41 | `higher = height[next_pos[i]] - height[i]` | +| 42 | `shorter < higher` | +| 43 | `previous[next_pos[i]] = previous[i]` | + +###### 第39题 + +**答案:** `i <= j` + +**解析:** 快速排序的两个扫描指针尚未交错时才能交换,条件为 `i<=j`。 + +###### 第40题 + +**答案:** `next_pos[order[i]] = order[i+1]` + +**解析:** 按身高顺序建立右邻链接,当前结点 `order[i]` 的后继应为 `order[i+1]`。 + +###### 第41题 + +**答案:** `higher = height[next_pos[i]] - height[i]` + +**解析:** 若存在更高的后继,与其身高差为 `height[next_pos[i]]-height[i]`,应赋给 `higher`。 + +###### 第42题 + +**答案:** `shorter < higher` + +**解析:** 只有更矮者严格更近时才选前驱。相等时题目要求选择更高者,因此条件应为 `shorterCSP-J 初赛模拟卷(第 14 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | D | D | A | C | C | D | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | A | B | B | B | A | B | + +**逐题解析** + +##### 第1题 + +**答案:** A + +**解析:** 一个字节为 $8$ 位,因此 $32$ 位整型变量占 $32/8=4$ 个字节。 + +##### 第2题 + +**答案:** D + +**解析:** `00100100` 和 `00010101` 分别表示 $36$ 和 $21$,相加为 $57$,二进制结果为 `00111001`。 + +##### 第3题 + +**答案:** D + +**解析:** 汇编语言仍用于与硬件密切相关的程序和特定性能要求的场景,并未被完全淘汰,因此 D 的说法错误。 + +##### 第4题 + +**答案:** A + +**解析:** FTP 是文件传输协议,用于在网络中的计算机之间传输文件。 + +##### 第5题 + +**答案:** C + +**解析:** 只含一种字母的不同非空子串有 $3\times3=9$ 个;跨越 `A/B` 或 `B/C` 边界的各有 $3\times3=9$ 个;同时含 `A、B、C` 的有 $3\times3=9$ 个。共 $9+9+9+9=36$ 个。 + +##### 第6题 + +**答案:** C + +**解析:** 对非负的 `x`,先乘 $100$,加 $0.5$ 后转为整数以完成四舍五入,再除以 `100.0` 恢复数量级,对应选项 C。 + +##### 第7题 + +**答案:** D + +**解析:** 补码 `11111001` 的符号位为 $1$,表示负数;逐位取反再加一,得其绝对值 `00000111`,即 $7$。所以原码为 `10000111`。 + +##### 第8题 + +**答案:** C + +**解析:** 欧几里得算法利用 $\gcd(a,b)=\gcd(b,a\bmod b)$,当 `b==0` 时返回 `a`,计算的是最大公约数。 + +##### 第9题 + +**答案:** B + +**解析:** 将三个盘子中的苹果数按从大到小排列,可得 $(7,0,0)$、$(6,1,0)$、$(5,2,0)$、$(5,1,1)$、$(4,3,0)$、$(4,2,1)$、$(3,3,1)$、$(3,2,2)$,共 $8$ 种。 + +##### 第10题 + +**答案:** A + +**解析:** 各层最多分别有 $1,2,4,\ldots,2^{n-1}$ 个结点,求和得到 $2^n-1$。 + +##### 第11题 + +**答案:** B + +**解析:** 无向完全图中,每两个不同顶点之间恰有一条边,因此边数为 $\binom72=7\times6/2=21$。 + +##### 第12题 + +**答案:** B + +**解析:** 根的高度为 $1$ 时,高度为 $h$ 的完全二叉树满足 $2^{h-1}\le n\le2^h-1$。由于 $32\le61\le63$,所以高度为 $6$。 + +##### 第13题 + +**答案:** B + +**解析:** 元素 $7$ 与后面的 $2,3,5,4$ 形成 $4$ 个逆序对,元素 $5$ 与 $4$ 再形成 $1$ 个,合计 $5$ 个。 + +##### 第14题 + +**答案:** A + +**解析:** 若 `L[k]` 同时大于两侧元素,应直接返回峰顶值,对应 c;若仍处于上升段,应搜索右半部分,对应 a;否则搜索左半部分,对应 b。顺序为 `c、a、b`。 + +##### 第15题 + +**答案:** B + +**解析:** 广度优先搜索按距起点的层次逐层扩展,先发现的结点先被扩展,因此通常使用先进先出的队列。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le i1$ 时,数组 `d` 模拟 $k$ 进制计数,`len` 为有效位数,`ans` 记录进位次数。因此 $\mathrm{ans}=\sum_{t\ge1}\lfloor n/k^t\rfloor$。当 $k=1$ 时应直接分析程序,此时每轮恰有一次进位,最终 `ans=n`。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | D | B | D | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 当 $k=1$ 时,第一轮使 `len` 变为 $2$,随后不再增加,因此 `len` 并不总等于 $n$。 + +###### 第23题 + +**答案:** ×(错误) + +**解析:** 取 $n=1,k=2$,最终 `len=1`,并不小于 $n$,即可构成反例。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** `len` 是 $n$ 的 $k$ 进制位数,满足 $k^{\mathrm{len}-1}\le n0$ 时最终至少有一对,输出小于 $2n$。 + +###### 第29题 + +**答案:** ×(错误) + +**解析:** 最终答案为偶数,但某一次执行 `++ans` 后的中间值可以是奇数。例如仅配对 `(1,2)` 时,扫描 `i=1` 就可能使 `ans` 变为 $1$。 + +###### 第30题 + +**答案:** ×(错误) + +**解析:** 例如输入配对 `(1,2)`、`(3,1)` 后,`a[1]=2`、`b[1]=3`,二者可以同时大于零。 + +###### 第31题 + +**答案:** ×(错误) + +**解析:** 例如先后输入 `(1,2)`、`(1,3)`,每次均有 `xCSP-J 初赛模拟卷(第 15 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | A | A | A | B | B | A | B | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | D | B | A | B | C | A | D | + +**逐题解析** + +##### 第1题 + +**答案:** B + +**解析:** 图灵奖是计算机科学领域的重要奖项;其余奖项分别主要面向电影、自然科学及文学等领域、新闻等领域。 + +##### 第2题 + +**答案:** A + +**解析:** 早期电子计算机首先用于科学与工程中的数值计算,例如数值表和复杂算式的计算。 + +##### 第3题 + +**答案:** A + +**解析:** 各层最多分别有 $1,2,4,\ldots,2^{n-1}$ 个结点,求和得到 $2^n-1$。 + +##### 第4题 + +**答案:** A + +**解析:** 删除边 `a` 后,剩余有向路径仍使任意两个顶点互相可达,图仍满足强连通定义,因此选 A。 + +##### 第5题 + +**答案:** B + +**解析:** `a` 初始为 $1$,每轮减 $2$。执行两轮后 `s=2`、`a=-3`;要使循环此时结束,应输入 `n=-3`。 + +##### 第6题 + +**答案:** B + +**解析:** 元素 $7$ 与后面的 $2,3,5,4$ 形成 $4$ 个逆序对,元素 $5$ 与 $4$ 再形成 $1$ 个,合计 $5$ 个。 + +##### 第7题 + +**答案:** A + +**解析:** 字符串是由字符组成的特殊线性表,可以用数组存储;长度可以为零。含空格字符的串仍含有元素,不是空串。 + +##### 第8题 + +**答案:** B + +**解析:** $10000=2^4\times5^4$。在 $1$ 至 $10000$ 中,去掉能被 $2$ 或 $5$ 整除的数,并加回被重复扣除的 $10$ 的倍数,得到 $10000-5000-2000+1000=4000$ 个。 + +##### 第9题 + +**答案:** D + +**解析:** 前序顺序为“根、左、右”,中序顺序为“左、根、右”。要使两者相同,每个结点都不能有左子树;因此只含根结点或仅沿右孩子延伸的二叉树符合条件。 + +##### 第10题 + +**答案:** B + +**解析:** 全集的子集总数为 $S=2^{10}=1024$,含 $7$ 个元素的子集数为 $T=\binom{10}7=120$,因此 $T/S=120/1024=15/128$。 + +##### 第11题 + +**答案:** A + +**解析:** 不能分享给 Jacob 或他的朋友,否则 Jacob 可能通过评论看到照片。Dana、Michael、Eve 均符合条件,对应 A。 + +##### 第12题 + +**答案:** B + +**解析:** `x & (x-1)` 每次恰好清除二进制表示中最右侧的一个 `1`。循环次数因此等于 `1` 的个数,所填语句为 `x &= x - 1`。 + +##### 第13题 + +**答案:** C + +**解析:** 方案二每公里消耗更多,但每周最多安排 $3$ 次。安排 $3$ 次方案二、$2$ 次方案一,共跑 $3\times5+2\times3=21$ 公里,消耗 $3\times600+2\times300=2400$ 千卡,满足时间与里程限制。 + +##### 第14题 + +**答案:** A + +**解析:** 含 $n$ 个顶点的连通无向图至少有 $n-1$ 条边;取一棵生成树即可达到这个最小值。因此 $10$ 个顶点可用 $9$ 条边构成连通图。 + +##### 第15题 + +**答案:** D + +**解析:** Linux 可执行文件没有统一的默认扩展名;能否执行主要由文件格式及执行权限决定,因此前三项均不符合。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le i=0 && y>=0 && x=0 && y>=0 && x> b[i][j]` | +| 34 | `m1-m2+1` | +| 35 | `good = true` | +| 36 | `m2` | +| 37 | `haveAns = true` | + +###### 第33题 + +**答案:** `cin >> b[i][j]` + +**解析:** 读入第二个矩阵时,应把数据存入 `b[i][j]`。 + +###### 第34题 + +**答案:** `m1-m2+1` + +**解析:** 小矩阵宽为 `m2`,放置的最后一列起点为 `m1-m2+1`。 + +###### 第35题 + +**答案:** `good = true` + +**解析:** 开始检查新的位置时,先假定匹配,令 `good=true`,发现不等元素后再改为假。 + +###### 第36题 + +**答案:** `m2` + +**解析:** 内层比较应遍历小矩阵全部 `m2` 列,因此上界为 `m2`。 + +###### 第37题 + +**答案:** `haveAns = true` + +**解析:** 发现一个匹配后,需令 `haveAns=true`,以避免最后误输出不存在答案。 + +##### 程序(3) + +**程序分析:** 程序扫描原字符串,把所有非数字字符依次复制到前面,用 `j` 记录保留字符数,最后只输出这 `j` 个字符,从而删除全部数字。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 38 | `\|\|` | +| 39 | `j++` | +| 40 | `j` | +| 41 | `s[i]` | + +###### 第38题 + +**答案:** `||` + +**解析:** 不属于数字的条件是小于字符 `0` 或大于字符 `9`,应使用逻辑或运算符 `||`。 + +###### 第39题 + +**答案:** `j++` + +**解析:** 写入一个保留字符后,下一个写入位置需向后移动,执行 `j++`。 + +###### 第40题 + +**答案:** `j` + +**解析:** `j` 就是删除数字后保留下来的字符数,应作为函数返回值。 + +###### 第41题 + +**答案:** `s[i]` + +**解析:** 保留字符已经依次存入 `s[0..len-1]`,输出时逐个访问 `s[i]`。 diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第16套-答案解析.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第16套-答案解析.md new file mode 100644 index 0000000..7e02e85 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第16套-答案解析.md @@ -0,0 +1,338 @@ +
CSP-J 初赛模拟卷(第 16 套)
+
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | D | D | B | A | A | B | C | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | B | A | C | C | C | C | + +**逐题解析** + +##### 第1题 + +**答案:** C + +**解析:** PENTIUM(奔腾)、酷睿和赛扬均为 CPU 的产品系列或型号名称。 + +##### 第2题 + +**答案:** D + +**解析:** 按题目采用的 $1024$ 进位约定,$1\ \mathrm{TB}=1024^4\ \mathrm{B}=2^{40}\ \mathrm{B}$。 + +##### 第3题 + +**答案:** D + +**解析:** 先将 `d` 入栈再出栈,然后依次压入 `a、b、c`,即可使栈内从底到顶为 `a、b、c`,因此 D 可行。其余选项不能在保留这三个元素的同时得到所要求的栈内顺序。 + +##### 第4题 + +**答案:** B + +**解析:** 将三进制数按位权展开,可得 $3Z=6X+2Y$。结合数字范围及首位不为零,得到 $X=1,Y=0,Z=2$。于是 $(10)_3\times(21)_3=(210)_3$,对应 `ZXY`。 + +##### 第5题 + +**答案:** A + +**解析:** $5$ 层满二叉树的结点数为 $1+2+4+8+16=2^5-1=31$。 + +##### 第6题 + +**答案:** A + +**解析:** 先判断中间位置是否为峰顶,成立则执行 c 返回;若中间位置处于上升段,则执行 a 搜索右侧;否则执行 b 搜索左侧。顺序为 `c、a、b`。 + +##### 第7题 + +**答案:** B + +**解析:** 后缀表达式先写操作数,再写对应运算符。`b+c` 转为 `bc+`,随后与 `a`、`d` 相乘,得到 `abc+*d*`。 + +##### 第8题 + +**答案:** C + +**解析:** 先合并权值 $300$ 和 $400$,得到新结点 $700$。按同权时优先选择合并结点的规则,再合并 $600$ 和这个新结点,最后与原权值 $700$ 合并。“也”所在叶结点的深度为 $3$,编码长度为 $3$。 + +##### 第9题 + +**答案:** B + +**解析:** 由后序遍历末尾确定根 `A`,再借助中序遍历递归划分左右子树,得到前序遍历 `ABDEGHJCFI`。 + +##### 第10题 + +**答案:** B + +**解析:** `s` 从 `a` 开始,循环执行 `c` 次加一操作,因此最终为 `s=a+c`。 + +##### 第11题 + +**答案:** A + +**解析:** $A_1$ 的未访问邻接点为 $A_3$,深度优先搜索不能在访问 $A_1$ 后跳过 $A_3$ 而先访问 $A_2$,因此 A 不可能。 + +##### 第12题 + +**答案:** C + +**解析:** 顺序存储且根下标为 $1$ 时,下标为 $i$ 的结点的左右孩子下标分别为 $2i$、$2i+1$。因此下标为 $k$ 的结点,其父结点下标为 $\lfloor k/2\rfloor$。 + +##### 第13题 + +**答案:** C + +**解析:** 洗、切、炒可以对不同的菜进行流水作业。第一道菜需 $30$ 分钟,之后每隔 $10$ 分钟完成一道,三道菜共需 $50$ 分钟。 + +##### 第14题 + +**答案:** C + +**解析:** 有向图中,指向该顶点的边数为入度,从该顶点出发的边数为出度,顶点的度定义为二者之和。 + +##### 第15题 + +**答案:** C + +**解析:** $1949\bmod10=9$,对应天干“己”;$1949\bmod12=5$,对应地支“丑”,因此为己丑年。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 利用恒等式 $u+v-(u\mathbin{\&}v)=u\mathbin{|}v$,程序在所有数值不相同的元素对中寻找最大的按位或值;若不存在这样的元素对,保留初值 $-1$。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | √ | √ | C | C | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** 数组合法下标为 $0$ 至 $999$,因此输入 $n=1000$ 时仍不会越界;不是必须严格小于 $1000$。 + +###### 第17题 + +**答案:** ×(错误) + +**解析:** 若所有输入值都相同,条件始终不成立,`ans` 保持为 $-1$,所以输出不一定非负。 + +###### 第18题 + +**答案:** √(正确) + +**解析:** 例如序列 `2,1`,原循环会处理“较小值在后、较大值在前”的有序对;限制 `j=i+1` 会漏掉该比较,输出可能改变。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** 按位或具有交换性。把严格小于改为不等于只会同时处理反向的一对,不会改变最大值。 + +###### 第20题 + +**答案:** C + +**解析:** 若出现 $128$,只要与某个不同值配对,其按位或的结果就至少为 $128$;若全部为 $128$ 则输出为 $-1$。两种情况都不可能得到 $127$。 + +###### 第21题 + +**答案:** C + +**解析:** 按位或结果为偶数,说明参与得到该结果的两个数最低位均为零,因此输入中至少有两个偶数。 + +##### 程序(2) + +**程序分析:** 每个区间取最小元素为根,递归处理左右区间,最终计算各结点深度与对应 `b` 值的乘积之和,可视为在最小笛卡尔树上求加权深度和。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | A | D | D | B | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 即使最小值重复,程序也会选择扫描到的第一个最小值作为分界点,左右递归区间仍严格缩小,因此重复本身不会导致错误。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 每个结点的贡献都是 `depth*b[mink]`,当所有 `b` 均为零时,输出必为零。 + +###### 第24题 + +**答案:** A + +**解析:** 最坏情况下每次最小值都位于端点,扫描次数为 $100+99+\cdots+1=5050$,最接近 $5000$。 + +###### 第25题 + +**答案:** D + +**解析:** 最好情况下形成尽量平衡的树。$100$ 个结点的最小深度和为 $580$,相应扫描总次数也为 $580$,最接近 $600$。 + +###### 第26题 + +**答案:** D + +**解析:** 将权值 $1$ 至 $10$ 依次安排在深度 $1$ 至 $10$ 的链上,可得到最大加权深度和 $1^2+2^2+\cdots+10^2=385$。 + +###### 第27题 + +**答案:** B + +**解析:** 按层尽量填满的树使总深度最小,得到 $1\times1+2\times2+3\times4+4\times8+5\times16+6\times32+7\times37=580$。 + +##### 程序(3) + +**程序分析:** `A[i][j]` 由杨辉三角递推得到组合数 $\binom ij$ 对 `MOD` 取模的值;`sum` 为该数组的二维前缀和,同样对 `MOD` 取模。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | × | × | √ | C | C | + +###### 第28题 + +**答案:** ×(错误) + +**解析:** 对角线元素为 $A[i][i]=\binom ii=1$,并不是零。 + +###### 第29题 + +**答案:** ×(错误) + +**解析:** 该递推计算的是组合数而非排列数,且保存的是组合数对 `MOD` 取模后的值。 + +###### 第30题 + +**答案:** ×(错误) + +**解析:** 前缀和取模后可能从较大的值回绕到较小值,因此不能保证所述单调关系。 + +###### 第31题 + +**答案:** √(正确) + +**解析:** 在取模前额外加一个 `MOD`,不会改变对 `MOD` 取模后的余数。 + +###### 第32题 + +**答案:** C + +**解析:** 前 $10$ 行的最大组合数为 $\binom{10}5=252$,这些值均小于模数,因此无需考虑取模改变数值。 + +###### 第33题 + +**答案:** C + +**解析:** 查询为 `sum[5][3]`,即将前 $5$ 行、前 $3$ 列的组合数求和,结果为 $1+3+7+14+25=50$。 + +#### **三、完善程序** + +##### 程序(1) + +**程序分析:** 函数跳过非数字字符,单独记录负号,然后逐位将十进制字符转换为整数;返回前按符号取正或取负。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 34 | `cin.get()` | +| 35 | `num = c - '0'` | +| 36 | `c >= '0' && c <= '9'` | +| 37 | `num = num * 10 + c - '0'` | +| 38 | `num = -num` | + +###### 第34题 + +**答案:** `cin.get()` + +**解析:** 尚未遇到数字或负号时,应继续读取下一个字符,调用 `cin.get()`。 + +###### 第35题 + +**答案:** `num = c - '0'` + +**解析:** 若第一个有效字符不是负号,它就是首位数字,应先令 `num=c-'0'`。 + +###### 第36题 + +**答案:** `c >= '0' && c <= '9'` + +**解析:** 后续只要字符仍在 `0` 至 `9` 的范围内,就继续处理,条件为 `c>='0' && c<='9'`。 + +###### 第37题 + +**答案:** `num = num * 10 + c - '0'` + +**解析:** 原数乘 $10$ 后加上新的一位,执行 `num=num*10+c-'0'`。 + +###### 第38题 + +**答案:** `num = -num` + +**解析:** 若出现负号,返回前执行 `num=-num`。 + +##### 程序(2) + +**程序分析:** 程序在整数值域中二分中位数。对于候选 `mid`,统计严格大于它的元素个数;若多于半数,则中位数更大,否则中位数不超过当前值。 + +**答案速查** + +| 题号 | 答案 | +| :---: | :--- | +| 39 | `rbound > lbound` | +| 40 | `count = 0` | +| 41 | `x[i] > mid` | +| 42 | `count++` | +| 43 | `rbound = mid` | + +###### 第39题 + +**答案:** `rbound > lbound` + +**解析:** 当左右边界尚未重合时继续二分,条件为 `rbound>lbound`。 + +###### 第40题 + +**答案:** `count = 0` + +**解析:** 每次更换候选值后,应重新统计,令 `count=0`。 + +###### 第41题 + +**答案:** `x[i] > mid` + +**解析:** 应统计严格大于 `mid` 的数,即 `x[i]>mid`。若用 `>=`,例如序列 `1,2,3` 会错误地把答案推到 $3$。 + +###### 第42题 + +**答案:** `count++` + +**解析:** 每发现一个满足条件的元素,就使计数加一,执行 `count++`。 + +###### 第43题 + +**答案:** `rbound = mid` + +**解析:** 严格大于 `mid` 的元素不超过一半时,中位数至多为 `mid`,应执行 `rbound=mid`。 diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第17套-答案解析.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第17套-答案解析.md new file mode 100644 index 0000000..93a9043 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/答案解析/CSP-J初赛模拟卷·第17套-答案解析.md @@ -0,0 +1,330 @@ +
CSP-J 初赛模拟卷(第 17 套)
+
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | A | B | C | B | A | C | A | B | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | B | D | B | A | C | D | + +**逐题解析** + +##### 第1题 + +**答案:** A + +**解析:** $114$ 的 8 位二进制为 `01110010`。逐位取反得到 `10001101`,再加一得到 $-114$ 的补码 `10001110`。 + +##### 第2题 + +**答案:** B + +**解析:** Gitee 是代码托管与协作平台,不是题目所描述的在线算法判题系统;其余三个网站均提供在线判题功能。 + +##### 第3题 + +**答案:** C + +**解析:** 按题目的字母编号规则,`B=2`、`Y=25`、`T=20`,因此 `BYT` 对应 $2\times26^2+25\times26+20=2022$。 + +##### 第4题 + +**答案:** B + +**解析:** 每个像素占 $24/8=3$ 字节,总空间为 $4096\times2160\times3=26542080$ 字节,约为 $25.31\ \mathrm{MB}$,最接近 $25\ \mathrm{MB}$。 + +##### 第5题 + +**答案:** A + +**解析:** 快速选择利用划分操作,仅继续处理包含第 $k$ 大元素的那一侧,平均时间复杂度为 $O(n)$;比较所有元素本身也需要线性级别的时间。 + +##### 第6题 + +**答案:** C + +**解析:** ②是树的唯一路径性质,③可由树至少存在叶结点得到。①还需要连通等条件,仅有顶点数和边数不足以保证为树;④与树无环的性质矛盾。因此正确的是②③。 + +##### 第7题 + +**答案:** A + +**解析:** 最小总代价与哈夫曼合并代价相同。依次合并 $5+10=15$、$13+14=27$、$15+27=42$,总代价为 $15+27+42=84$。 + +##### 第8题 + +**答案:** B + +**解析:** 由两种遍历还原二叉树后,根 `H` 的右孩子为 `D`,`D` 的左孩子为 `A`,`A` 的左右孩子为 `F、E`。其下标依次为 $1,3,6,12,13$,因此最大下标为 $13$。 + +##### 第9题 + +**答案:** C + +**解析:** 代入 `a=1,b=0,c=1`,A、B 的值均为 $0$,D 的值为 $2$。C 中 `!c` 为 $0$,内层逻辑与为 $0$,再取逻辑非得到 $1$。 + +##### 第10题 + +**答案:** B + +**解析:** 最理想情况下,每次要找的元素都位于链表表头,只需访问一个已有结点。因此 $k$ 次操作至少访问 $k$ 次已有结点。 + +##### 第11题 + +**答案:** D + +**解析:** 按 C 班派出人数 $0,1,2,3$ 分类,满足 A 班至多 $5$ 人、B 班至多 $4$ 人及总人数为 $6$ 的方案数依次为 $4,5,5,4$,合计 $18$ 种。 + +##### 第12题 + +**答案:** B + +**解析:** 直接插入排序在一般及最坏情况下需要逐个移动、比较前面的元素,总次数可达到 $1+2+\cdots+(n-1)$,时间复杂度为 $O(n^2)$。 + +##### 第13题 + +**答案:** A + +**解析:** `rand()%(b-a)` 的取值范围为 $0$ 至 $b-a-1$,再加上 `a`,即得到 $a$ 至 $b-1$,符合左闭右开的区间 $[a,b)$。 + +##### 第14题 + +**答案:** C + +**解析:** $7$ 个顶点的完全图有 $\binom72=21$ 条边。森林至多保留 $7-1=6$ 条边,因此至少删去 $21-6=15$ 条边,保留一棵生成树即可达到。 + +##### 第15题 + +**答案:** D + +**解析:** 2020 年举办的是第 $37$ 届全国青少年信息学奥林匹克竞赛,举办地为湖南长沙,对应 D。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** 递归满足 $\operatorname{luo}(n,m)=\sum_{0\le iCSP-J 初赛模拟卷(第 18 套) +
参考答案与解析
+ +--- + +#### **一、单项选择题** + +**答案速查** + +| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | C | B | C | B | D | B | A | + +| 题号 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | D | B | C | C | C | A | + +**逐题解析** + +##### 第1题 + +**答案:** C + +**解析:** 按位权展开,$(24)_x=2x+4=18$,解得 $x=7$,且各位数字均小于进制基数 $7$。 + +##### 第2题 + +**答案:** C + +**解析:** 域名中的 `gov` 表示政府机构,`.cn` 表示中国的国家顶级域名,因此该网站属于政府机构网站。 + +##### 第3题 + +**答案:** B + +**解析:** 操作系统直接负责处理器调度、内存管理和设备管理等工作,与计算机硬件的联系最密切。 + +##### 第4题 + +**答案:** C + +**解析:** 第一次判断 `while(i++)` 时先使用旧值 $1$,随后 `i=2`,执行 `s+=2`;第二次判断后 `i=3`,满足 `i%3==0` 而退出,最终 `s=2`。 + +##### 第5题 + +**答案:** B + +**解析:** 满足条件的无序组合为 $(2,8,9)$、$(3,7,9)$、$(4,6,9)$、$(4,7,8)$、$(5,6,8)$,共 $5$ 种。 + +##### 第6题 + +**答案:** D + +**解析:** 三人的选课方案相互独立,方案总数为 $\binom42\binom43\binom43=6\times4\times4=96$。 + +##### 第7题 + +**答案:** B + +**解析:** 根为 `A`;其左子树由 `B、D` 构成,后序为 `DB`;右子树由 `C、E` 构成,后序为 `EC`。合并得到 `DBECA`。 + +##### 第8题 + +**答案:** A + +**解析:** 引导固件需要在断电后仍能保存,通常存放在 ROM 或具有相应非易失特性的存储器中,本题选择 ROM。 + +##### 第9题 + +**答案:** C + +**解析:** 表达式的最外层运算是减法,左操作数为 `a+b*c`,右操作数为 `d+e`。分别转为前缀形式后,得到 `-+a*bc+de`。 + +##### 第10题 + +**答案:** D + +**解析:** 灯的状态每 $6$ 次按键循环一次。$49\bmod6=1$,对应白灯亮;$100\bmod6=4$,对应灯灭。 + +##### 第11题 + +**答案:** B + +**解析:** $704=2^6\times11$,$2048=2^{11}$,因此最小公倍数为 $2^{11}\times11=22528$。 + +##### 第12题 + +**答案:** C + +**解析:** 逻辑或仅在两个操作数都为 $0$ 时结果为 $0$;只要有一个为 $1$,结果就为 $1$。 + +##### 第13题 + +**答案:** C + +**解析:** 代入 C,可得到三组队友分别为“小明与小红”“小刚与琳达”“小伟与小丽”,每组都不是夫妻,且满足小刚与小伟的妻子、琳达的丈夫与小丽同组的条件。 + +##### 第14题 + +**答案:** C + +**解析:** 先让用时 $1$、$2$ 的两人过桥,用时 $1$ 的人返回;再让用时 $5$、$10$ 的两人过桥,用时 $2$ 的人返回;最后前两人一起过桥。总时间为 $2+1+10+2+2=17$ 分钟。 + +##### 第15题 + +**答案:** A + +**解析:** 姚期智于 2000 年获得图灵奖,以表彰其在计算理论等领域作出的突出贡献。 + +#### **二、阅读程序** + +##### 程序(1) + +**程序分析:** `num[i]` 表示以第 `i` 个元素结尾的最长严格递增子序列长度。程序尝试由前面更小的元素转移,最后取所有 `num[i]` 的最大值。 + +**答案速查** + +| 题号 | 16 | 17 | 18 | 19 | 20 | 21 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | × | √ | D | B | + +###### 第16题 + +**答案:** ×(错误) + +**解析:** 算法只比较元素大小,负数同样可以参与比较,不会仅因输入为负数而出错。 + +###### 第17题 + +**答案:** √(正确) + +**解析:** 长度为 $n$ 的序列,其子序列最多包含 $n$ 个元素,因此 `ans<=n`。 + +###### 第18题 + +**答案:** ×(错误) + +**解析:** 例如序列 `1,2` 中,初始两项的 `num` 都为 $1$;必须允许相等时更新,才能把第二项改为 $2$。改成严格大于后会漏掉这次转移。 + +###### 第19题 + +**答案:** √(正确) + +**解析:** 当 `num[i]==ans` 时,无论是否再次赋值,`ans` 的数值都不变,因此修改不影响最大值。 + +###### 第20题 + +**答案:** D + +**解析:** 所有数相等时,不存在严格递增的相邻选取关系,最长严格递增子序列只能取一个元素,输出 $1$。 + +###### 第21题 + +**答案:** B + +**解析:** 样例的动态规划长度依次为 $1,1,2,3,4,3,2,4,5,3$,最大值为 $5$;例如可取 `2,5,7,10,15`。 + +##### 程序(2) + +**程序分析:** 程序模拟长除法,`b` 保存商的各位,`a` 保存待除数(余数乘十)。若待除数重复,就找到了循环节;若余数变为零,则小数终止。 + +**答案速查** + +| 题号 | 22 | 23 | 24 | 25 | 26 | 27 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | × | √ | √ | × | C | D | + +###### 第22题 + +**答案:** ×(错误) + +**解析:** 当 `n==m` 且 `m!=0` 时,整数部分为 $1$、余数为零,可以正常结束,不要求两个输入不同。 + +###### 第23题 + +**答案:** √(正确) + +**解析:** 程序包含整数除法和取模,除数 `m` 必须非零。 + +###### 第24题 + +**答案:** √(正确) + +**解析:** 循环可因检测到重复待除数而执行 `break`,也可因余数为零而使 `do...while` 条件不成立,共有两种退出途径。 + +###### 第25题 + +**答案:** ×(错误) + +**解析:** 例如输入 `1 3` 时,会出现待除数 $10$,已经大于初始的 $n=1$,因此该限制不成立。 + +###### 第26题 + +**答案:** C + +**解析:** $11/8=1.375$,是有限小数,不需循环节括号,因此输出 `1.375`。 + +###### 第27题 + +**答案:** D + +**解析:** 输入为 `5 13`,$5/13=0.\overline{384615}$,输出为 `0.(384615)`,对应 D。 + +##### 程序(3) + +**程序分析:** DFS 从每个顶点出发枚举不重复顶点的路径,回溯时撤销访问标记,`ans` 记录路径权值之和的最大值,即最长简单路径长度。 + +**答案速查** + +| 题号 | 28 | 29 | 30 | 31 | 32 | 33 | +| :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | √ | √ | D | B | B | C | + +###### 第28题 + +**答案:** √(正确) + +**解析:** 简单无向完全图的所有非对角邻接项都会被输入边覆盖;对角项不会被用于访问已标记的当前顶点,因此可省略这段初始化。 + +###### 第29题 + +**答案:** √(正确) + +**解析:** 所有起点仍会被完整枚举,改变枚举先后不影响最终取到的最大值。 + +###### 第30题 + +**答案:** D + +**解析:** 图中两个连通分量各只有一条权值为 $1$ 的边,最长简单路径长度为 $1$。 + +###### 第31题 + +**答案:** B + +**解析:** 四个顶点的完全图中,每条边权值为 $1$,简单路径至多经过 $3$ 条边,且可以达到,因此输出 $3$。 + +###### 第32题 + +**答案:** B + +**解析:** 顶点 $4$ 孤立,三角形中最长简单路径可取 $2\to3\to1$,长度为 $20+30=50$。 + +###### 第33题 + +**答案:** C + +**解析:** 取路径 $3\to1\to4\to2$,长度为 $50+40+60=150$;枚举其他简单路径也不能得到更大值。 + +#### **三、完善程序** + +##### 程序(1) + +**程序分析:** 程序将大整数的十进制各位逆序存入数组,使下标 $1$ 对应个位;按位相加并向高位进位,最后从最高位向最低位输出。 + +**答案速查** + +| 题号 | 34 | 35 | 36 | 37 | 38 | +| :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | B | C | A | A | C | + +###### 第34题 + +**答案:** B(`a.num[a.len-i]=c[i]-'0'`) + +**解析:** 字符串第 `i` 个字符对应从低位计数的 `a.len-i` 位,减去字符 `0` 后得到数字值。 + +###### 第35题 + +**答案:** C(`b.num[b.len-i]=d[i]-'0'`) + +**解析:** 同理,将第二个字符串第 `i` 个字符存入 `b.num[b.len-i]`,并减去字符 `0`。 + +###### 第36题 + +**答案:** A(`(a.num[i]+b.num[i])`) + +**解析:** 当前位应加上两个加数相同位置的数字,即 `a.num[i]+b.num[i]`,同时保留前一位已经产生的进位。 + +###### 第37题 + +**答案:** A(`w.num[i]/10`) + +**解析:** 当前位总和除以 $10$ 得到进位值,应把 `w.num[i]/10` 加入下一位。 + +###### 第38题 + +**答案:** C(`w.num[w.len+1]!=0`) + +**解析:** 若原最高位之后仍有非零进位,即 `w.num[w.len+1]!=0`,结果长度需增加一位。 + +##### 程序(2) + +**程序分析:** 程序从指定格子出发,按马的八种走法回溯。移动前同时检查是否在棋盘内、是否访问过;`tot` 记录已移动的步数,访问满整个棋盘时增加方案数。 + +**答案速查** + +| 题号 | 39 | 40 | 41 | 42 | 43 | +| :---: | :---: | :---: | :---: | :---: | :---: | +| 答案 | C | B | D | A | D | + +###### 第39题 + +**答案:** C(`x>=0 && y>=0 && x=0 && y>=0 && xCSP-J 初赛模拟卷(第 01 套) +
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 中国的国家顶级域名是( )。 +A. .cn  B. .ch  C. .chn  D. .china + +( ) 2. 下列不属于面向对象程序设计语言的是( )。 +A. C  B. `C++`  C. Java  D. C# + +( ) 3. 以比较作为基本运算,在N个数中找出最大数,最坏情况下所需要的最少的比较次数为( )。 +A. $N^2$  B. N  C. N-1  D. `N+1` + +( ) 4. 表达式a\*(b+c)\*d 的后缀表达式为( ),其中“\*”和“+”是运算符。 +A. `**a+bcd`  B. `abc+*d*`  C. `abc+d**`  D. `*a*+bcd` + +( ) 5. 在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 +A. 43  B. -85  C. -43  D. -84 + +( ) 6. FTP 可以用于( )。 +A. 远程传输文件  B. 发送电子邮件  C. 浏览网页  D. 网上聊天 + +( ) 7. 319和377的最大公约数是( )。 +A. 27  B. 33  C. 29  D. 31 + +( ) 8. 对于有n个顶点、m条边的无向联通图(m>n),需要删掉( )条边才能使其成为一棵树。 +A. n-1  B. m - n  C. m - n - 1  D. `m - n + 1` + +( ) 9. 如果一棵二叉树的中序遍历是 BAC,那么它的先序遍历不可能是( )。 +A. ABC  B. CBA  C. ACB  D. BAC + +( ) 10. 以a为起点,对右边的无向图进行深度优先遍历,则b,c,d,e四个点中有可能作为最后一个遍历到的点个数为( )。 +题目图示 + +A. 1  B. 2  C. 3  D. 4 + +( ) 11. 以 A0作为起点,对下面的无向图进行深度优先遍历时,遍历顺序不可能是( )。 +题目图示 + +A. $A_0,A_1,A_2,A_3$  B. $A_0,A_1,A_3,A_2$  C. $A_0,A_2,A_1,A_3$  D. $A_0,A_3,A_1,A_2$ + +( ) 12. 6个人,两个人组一队,总共组成三只不区分队伍的编号,不同的组队情况有( )种。 +A. 10  B. 15  C. 30  D. 20 + +( ) 13. 如果根的高度为 1,具有 61 个结点的完全二叉树的高度为( )。 +A. 5  B. 6  C. 7  D. 8 + +( ) 14. 设x=true,y=true,z=false以下逻辑运算表达式值为真的是( )。 +A. $(y\lor z)\wedge x\wedge z$  B. $x\wedge (z\lor y)\wedge z$  C. $(x\wedge y)\wedge z$  D. $(x\wedge y)\vee (z\vee x)$ + +( ) 15. 有五副不同颜色的手套(共 10 只手套,每副手套左右手各 1 只),一次性从中取 6 只手套,请问恰好能配成两副手套的不同取法有( )种。 +A. 120  B. 180  C. 150  D. 30 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 36 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 char st[100001]; + 5 int main() { + 6 scanf("%s", st); + 7 int n = strlen(st); + 8 for (int i = 1; i <= n; ++i) { + 9 if (n % i == 0) { +10 char c = st[i - 1]; +11 if (c >= 'a') +12 st[i - 1] = c - 'a' + 'A'; +13 } +14 } +15 printf("%s", st); +16 return 0; +17 } +``` + +**判断题** + +( ) 16. (1.5分) 输入的字符串只能由小写字母或大写字母组成。( ) + +( ) 17. (1.5分) 若将第 8 行的 `i = 1` 改为 `i = 0`,程序运行时会发生错误。( ) + +( ) 18. (1.5分) 若将第 8 行的 `i <= n` 改为 `i * i <= n`,程序运行结果不会改变。( ) + +( ) 19. (1.5分) 若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。( ) + +**单选题** + +( ) 20. (3分) 若输入的字符串长度为 18,那么输入的字符串跟输出的字符串相比,至多有( )个字符不同。 +A. 18  B. 6  C. 10  D. 1 + +( ) 21. (3分) 若输入的字符串长度为( ),那么输入的字符串跟输出的字符串相比,至多有 36 个字符不同。 +A. 36  B. 100000  C. 1  D. 128 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 long long n, ans; + 5 int k, len; + 6 long long d[1000000]; + 7 + 8 int main() { + 9 cin >> n >> k; +10 d[0] = 0; +11 len= 1; +12 ans = 0; +13 for (long long i = 0; i 1$,则输出 `ans` 时,`len` 一定小于 $n$。( ) + +( ) 24. (1.5分) 若 $k>1$,则输出 `ans` 时,$k^{\mathrm{len}}$ 一定大于 $n$。( ) + +**单选题** + +( ) 25. (3分) 若输入的 $n=10^{15}$,$k=1$,则输出等于( )。 +A. $1$  B. $(10^{30}-10^{15})/2$  C. $(10^{30}+10^{15})/2$  D. $10^{15}$ + +( ) 26. (3分) 若输入的 $n=205891132094649$(即 $3^{30}$),$k=3$,则输出等于( )。 +A. $3^{30}$  B. $(3^{30}-1)/2$  C. $3^{30}-1$  D. $(3^{30}+1)/2$ + +( ) 27. (3分) 若输入的 $n=100010002000090$,$k=10$,则输出等于( )。 +A. 11112222444543  B. 11122222444453 +C. 11122222444543  D. 11112222444453 + +**(3)** + +```cpp + 1 #include + 2 + 3 int n; + 4 int a[1000]; + 5 + 6 int f(int x) + 7 { + 8 int ret = 0; + 9 for (; x; x &= x - 1) ret++; +10 return ret; +11 } +12 +13 int g(int x) +14 { +15 return x & -x; +16 } +17 +18 int main() +19 { +20 scanf("%d", &n); +21 for (int i = 0; i < n; i++) scanf("%d", &a[i]); +22 for (int i = 0; i < n; i++) +23 printf("%d ", f(a[i]) + g(a[i])); +24 printf("\n"); +25 return 0; +26 } +``` + +**判断题** + +( ) 28. (1.5分) 输入的n等于1001时,程序不会发生下标越界。( ) + +( ) 29. (1.5分) 输入的 $a[i]$ 必须全为正整数,否则程序将陷入死循环。( ) + +( ) 30. (1.5分) 当输入为“5 2 11 9 16 10”时,输出为“3 4 3 17 5”。( ) + +( ) 31. (1.5分) 当输入为"1 511998"时,输出为"18”。( ) + +( ) 32. (1.5分) 将源代码中 $g$ 函数的定义(13-16行)移到main函数的后面,程序可以正常编译运行。( ) + +**单选题** + +( ) 33. (3分) 当输入为"2 -65536 2147483647"时,输出为( ) +A. "65532 33"  B. "65552 32"  C. "65535 34"  D. "65554 33" + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 30 分,各小题分值见题目)** + +**(1)** + +(最小区间覆盖)给出 $n$ 个区间,第 $i$ 个区间的左右端点是 $[a_i, b_i]$。现在要在这些区间中选出若干个,使得区间 $[0, m]$ 被所选区间的并覆盖(即每一个 $0 \leq i < m$ 都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。 + +输入第一行包含两个整数 $n$ 和 $m$ ($1 \leq n \leq 5000, 1 \leq m \leq 10^9$)接下来 $n$ 行,每行两个整数 $a_i, b_i$ ($0 \leq a_i, b_i \leq m$)。 + +提示:采用贪心法解决这个问题。采用 $O(n^{2})$ 的时间复杂度排序,然后贪心选择这些区间。试补全程序。 + +```cpp + 1 #include + 2 + 3 using namespace std; + 4 + 5 const int MAXN = 5000; + 6 int n, m; + 7 struct segment { int a, b; } A[MAXN]; + 8 + 9 void sort() // 排序 +10 { +11 for (int i = 0; i < n; i++) +12 for (int j = 1; j < n; j++) +13 if (__(1)__) +14 { +15 segment t = A[j]; +16 __(2)__ +17 } +18 } +19 +20 int main() +21 { +22 cin >> n >> m; +23 for (int i = 0; i < n; i++) +24 cin >> A[i].a >> A[i].b; +25 sort(); +26 int p = 1; +27 for (int i = 1; i < n; i++) +28 if (__(3)__) +29 A[p++] = A[i]; +30 n = p; +31 int ans =0, r = 0; +32 int q = 0; +33 while (r < m) +34 { +35 while (__(4)__) +36 q++; +37 __(5)__; +38 ans++; +39 } +40 cout << ans << endl; +41 return 0; +42 } +``` + +( ) 34. (3分) (1)处应填 +A. `A[j].b>A[j-1].b`  B. `A[j].aA[j-1].a`  D. `A[j].bA[p-1].b`  B. `A[i].bA[i-1].b`  D. `A[i].b + 2 #include + 3 using namespace std; + 4 const int maxn = 10000000; + 5 const int maxs = 10000; + 6 + 7 int n; + 8 unsigned a[maxn], b[maxn],res[maxn], ord[maxn]; + 9 unsigned cnt[maxs + 1]; +10 int main() { +11 scanf("%d", &n); +12 for (int i = 0; i < n; ++i) +13 scanf("%u%u", &a[i], &b[i]); +14 memset(cnt, 0, sizeof(cnt)); +15 for (int i = 0; i < n; ++i) +16 __(1)__; // 利用 cnt 数组统计数量 +17 for (int i = 0; i < maxs; ++i) +18 cnt[i + 1] += cnt[i]; +19 for (int i = 0; i < n; ++i) +20 __(2)__; // 记录初步排序结果 +21 memset(cnt, 0, sizeof(cnt)); +22 for (int i = 0; i < n; ++i) +23 __(3)__; // 利用 cnt 数组统计数量 +24 for (int i = 0; i < maxs; ++i) +25 cnt[i + 1] += cnt[i]; +26 for (int i = n - 1; i >= 0; --i) +27 __(4)__; // 记录最终排序结果 +28 for (int i = 0; i < n; i++) +29 printf("%u %u\n", __(5)__); +30 +31 return 0; +32 } +``` + +( ) 39. (3分) (1)处应填 +A. `++cnt [i]`  B. `++cnt[b[i]]` +C. `++cnt[a[i] * maxs + b[i]]`  D. `++cnt[a[i]]` + +( ) 40. (3分) (2)处应填 +A. `ord[--cnt[a[i]]] = i`  B. `ord[--cnt[b[i]]] = a[i]` +C. `ord[--cnt[a[i]]] = b[i]`  D. `ord[--cnt[b[i]]] = i` + +( ) 41. (3分) (3)处应填 +A. `++cnt[b[i]]`  B. `++cnt[a[i] * maxs + b[i]]` +C. `++cnt[a[i]]`  D. `++cnt [i]` + +( ) 42. (3分) (4)处应填 +A. `res[--cnt[a[ord[i]]]] = ord[i]`  B. `res[--cnt[b[ord[i]]]] = ord[i]` +C. `res[--cnt[b[i]]] = ord[i]`  D. `res[--cnt[a[i]]] = ord[i]` + +( ) 43. (3分) (5)处应填 +A. `a[i], b[i]`  B. `a[res[i]], b[res[i]]` +C. `a[ord[res[i]], b[ord[res[i]]`  D. `a[res[ord[i]], b[res[ord[i]])` diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第02套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第02套.md new file mode 100644 index 0000000..bf8f895 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第02套.md @@ -0,0 +1,447 @@ +
CSP-J 初赛模拟卷(第 02 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 以下哪一种设备属于输出设备:( ) +A. 扫描仪  B. 键盘  C. 鼠标  D. 打印机 + +( ) 2. 如果256 种颜色用二进制编码来表示,至少需要( )位。 +A. 6  B. 7  C. 8  D. 9 + +( ) 3. 对于入栈顺序为a,b,c,d,e的序列,下列( )不是合法的出栈序列。 +A. a,b,c,d,e  B. e,d,c,b,a  C. b,a,c,d,e  D. c,d,a,e,b + +( ) 4. 如果一棵二叉树只有根结点,那么这棵二叉树高度为1。请问高度为5的完全二叉树有( )种不同形态? +A. 16  B. 15  C. 17  D. 32 + +( ) 5. 二进制数 11.01 在十进制下是( )。 +A. 3.25  B. 4.125  C. 6.25  D. 11.125 + +( ) 6. 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。 +A. 296  B. 133  C. 256  D. 199 + +( ) 7. 一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9, 9颠倒过来看还是6,其他数字颠倒过来都不构成数字。 +类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901。假设某个城市的车牌只由5位数字组成,每一位都可以取0到9。 +请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?( ) +A. 60  B. 125  C. 75  D. 100 + +( ) 8. 二进制数101.11对应的十进制数是( )。 +A. 6.5  B. 5.5  C. 5.75  D. 5.25 + +( ) 9. 使用冒泡排序对序列进行升序排列,每执行一次交换操作系统将会减少 1 个逆序对,因此序列 5,4,3,2,1 需要执行( )次操作,才能完成冒泡排序。 +A. 0  B. 5  C. 10  D. 15 + +( ) 10. 由1, 1, 2, 2, 3这五个数字组成不同的三位数有( )种。 +A. 18  B. 15  C. 12  D. 24 + +( ) 11. 将(2,6,10,17)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数 $h(x)=(\quad)$ ,将不会产生冲突,其中a mod b表示a除以b的余数。 +A. x mod 11  B. $x^{2} \mod 11$ +C. `(2x) mod 11`  D. $\lfloor sqrt(x) \rfloor \mod 11$ ,其中 $\lfloor sqrt(x) \rfloor$ 表示 $sqrt(x)$ 下取整 + +( ) 12. 寄存器是( )的重要组成部分. +A. 硬盘  B. 高速缓存  C. 内存  D. 中央处理器(CPU) + +( ) 13. 某算法的时间复杂度满足递推式 $T(n)=T(n-1)+n$,边界条件为 $T(0)=1$,则该算法的时间复杂度为( )。 +A. $O(\log n)$  B. $O(n\log n)$  C. $O(n)$  D. $O(n^2)$ + +( ) 14. 100以内最大的素数是( )。 +A. 89  B. 97  C. 91  D. 93 + +( ) 15. 言泡排序算法的伪代码如下: +```text +输入:数组L, n ≥ k。输出:按非递减顺序排序的 L。 +算法 BubbleSort: + 1. FLAG ← n //标记被交换的最后元素位置 + 2. while FLAG > 1 do + 3. k ← FLAG -1 + 4. FLAG ← 1 + 5. for j=1 to k do + 6. if L(j) > L(j+1) then do + 7. L(j) ⇌ L(j+1) + 8. FLAG ← j +``` +对 $n$ 个数用以上言泡排序算法进行排序,最少需要比较多少次?( )。 +A. $n^2$  B. $n - 2$  C. $n - 1$  D. $n$ + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 40.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 + 4 char base[64]; + 5 char table[256]; + 6 char str[256]; + 7 char ans[256]; + 8 + 9 void init() +10 { +11 for (int i = 0; i < 26; i++) base[i] = 'A' + i; +12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i; +13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i; +14 base[62] = '+', base[63] = '/'; +15 +16 for (int i = 0; i < 256; i++) table[i] = 0xff; +17 for (int i = 0; i < 64; i++) table[base[i]] = i; +18 table['='] = 0; +19 } +20 +21 void decode(char *str) +22 { +23 char *ret = ans; +24 int i, len = strlen(str); +25 for (i = 0; i < len; i += 4) { +26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4; +27 if (str[i + 2] != '=') +28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2; +29 if(str[i + 3] != '=') +30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]]; +31 } +32 } +33 +34 int main() +35 { +36 init(); +37 printf("%d\n", (int)table[0]); +38 +39 scanf("%s", str); +40 decode(str); +41 printf("%s\n", ans); +42 return 0; +43 } +``` + +假设 `char` 是 8 位有符号类型,输入字符串长度为 4 的倍数,且输入不超过数组范围。 + +**判断题** + +( ) 16. (1.5分) 输出的第二行一定是由小写字母、大写字母、数字和 `+`、`/`、`=` 构成的字符串。( ) + +( ) 17. (1.5分) 可能存在输入不同,但输出的第二行相同的情形。( ) + +( ) 18. (1.5分) 输出的第一行为 `-1`。( ) + +**单选题** + +( ) 19. (3分) 设输入字符串长度为 $n$,`decode` 函数的时间复杂度为( )。 +A. $O(\sqrt n)$  B. $O(n)$  C. $O(n\log n)$  D. $O(n^2)$ + +( ) 20. (3分) 当输入为 `Y3Nx` 时,输出的第二行为( )。 +A. `csp`  B. `csq`  C. `CSP`  D. `Csp` + +( ) 21. (3.5分) 当输入为 `Y2NmIDIwMjE=` 时,输出的第二行为( )。 +A. `ccf2021`  B. `ccf2022`  C. `ccf 2021`  D. `ccf 2022` + +**(2)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 + 5 int n; + 6 int d[50][2]; + 7 int ans; + 8 + 9 void dfs(int n, int sum) { +10 if (n == 1) { +11 ans = max(sum, ans); +12 return; +13 } +14 for (int i = 1; i < n; ++i) { +15 int a = d[i - 1][0], b = d[i - 1][1]; +16 int x = d[i][0], y = d[i][1]; +17 d[i - 1][0] = a + x; +18 d[i - 1][1] = b + y; +19 for (int j = i; j < n - 1; ++j) +20 d[j][0] = d[j + 1][0], d[j][1] = d[j + 1][1]; +21 int s = a + x + abs(b - y); +22 dfs(n - 1, sum + s); +23 for (int j = n - 1; j > i; --j) +24 d[j][0] = d[j - 1][0], d[j][1] = d[j - 1][1]; +25 d[i - 1][0] = a, d[i - 1][1] = b; +26 d[i][0] = x, d[i][1] = y; +27 } +28 } +29 +30 int main() { +31 cin >> n; +32 for (int i = 0; i < n; ++i) +33 cin >> d[i][0]; +34 for (int i = 0; i < n;++i) +35 cin >> d[i][1]; +36 ans = 0; +37 dfs(n, 0); +38 cout << ans << endl; +39 return 0; +40 } +``` + +假设输入的 $n$ 是不超过50的正整数,$d[i][0]$、$d[i][i]$ 都是不超过10000的正整数,完成下面的判断题和单选题: + +**判断题** + +( ) 22. (1.5分) 若输入 $n$ 为0,此程序可能会死循环或发生运行错误。( ) + +( ) 23. (1.5分) 若输入 $n$ 为20,接下来的输入全为0,则输出为0。( ) + +( ) 24. (1.5分) 输出的数一定不小于输入的 $d[i][0]$ 和 $d[i][1]$ 的任意一个。( ) + +**单选题** + +( ) 25. (3分) 若输入的 n 为 20,接下来的输入是 20 个 9 和 20 个 0,则输出为( )。 +A. 1890  B. 1881  C. 1908  D. 1917 + +( ) 26. (3分) 若输入的 $n$ 为30,接下来的输入是30个0和30个5,则输出为( )。 +A. 2000  B. 2010  C. 2030  D. 2020 + +( ) 27. (4分) 若输入的 n 为 15,接下来的输入是 15 到 1,以及 15 到 1,则输出为( )。 +A. 2440  B. 2220  C. 2240  D. 2420 + +**(3)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n, m; + 4 int a[100], b[100]; + 5 + 6 int main() { + 7 scanf("%d%d", &n, &m); + 8 for (int i = 1; i <= n; ++i) + 9 a[i] = b[i] = 0; +10 for (int i = 1; i <= m; ++i) { +11 int x, y; +12 scanf("%d%d", &x, &y); +13 if (a[x] < y && b[y] < x) { +14 if (a[x] > 0) +15 b[a[x]] = 0; +16 if (b[y] > 0) +17 a[b[y]] = 0; +18 a[x] = y; +19 b[y] = x; +20 } +21 } +22 int ans = 0; +23 for (int i = 1; i <= n; ++i) { +24 if (a[i] == 0) +25 ++ans; +26 if (b[i] == 0) +27 ++ans; +28 } +29 printf("%d", ans); +30 return 0; +31 } +``` + +假设输入的 $n$ 和 $m$ 都是正整数,$x$ 和 $y$ 都是在 $[1, n]$ 的范围内的整数,完成下面的判断题和单选题: + +**判断题** + +( ) 28. (1.5分) 当 $m > 0$ 时,输出的值一定小于 $2n$。( ) + +( ) 29. (1.5分) 执行完第27行的“+ + ans”时,ans一定是偶数。( ) + +( ) 30. (1.5分) $a[i]$ 和 $b[i]$ 不可能同时大于0。( ) + +( ) 31. (1.5分) 右程序执行到第13行时, $x$ 总是小于 $y$ ,那么第15行不会被执行。( ) + +**单选题** + +( ) 32. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 两两不同,则输出的值为( ) +A. $2n - 2m$  B. $2n + 2$  C. $2n - 2$  D. $2n$ + +( ) 33. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 都相等,则输出的值为( ) +A. $2n - 2$  B. $2n$  C. $2m$  D. $2n - 2m$ + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 30 分,各小题分值见题目)** + +**(1)** + +(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:数字0变成矩阵 +0 0 +0 1 + +数字1变成矩阵 +1 1 +1 0 + +最初该矩阵只有一个元素 0,变幻 n 次后,矩阵会变成什么样? + +例如,矩阵最初为:[0]; +矩阵变幻 1 次后: +0 0 +0 1 + +矩阵变幻 2 次后: +0 0 0 0 +0 1 0 1 +0 0 1 1 +0 1 1 0 + +输入一行一个不超过10的正整数n。输出变幻n次后的矩阵。 + +试补全程序。 + +提示: + +<< 表示二进制左移运算符,例如 $(11)_{2}<<2=(1100)_{2}$ ; +而^表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为0,反之为1。 + +```cpp + 1 #include + 2 using namespace std; + 3 int n; + 4 const int max_size = 1 << 10; + 5 + 6 int res[max_size][max_size]; + 7 + 8 void recursive(int x, int y, int n, int t) { + 9 if (n == 0) { +10 res[x][y] = __(1)__; +11 return; +12 } +13 int step = 1 << (n - 1); +14 recursive(__(2)__, n - 1, t); +15 recursive(x, y + step, n - 1, t); +16 recursive(x + step, y, n - 1, t); +17 recursive(__(3)__, n - 1, !t); +18 } +19 +20 int main() { +21 scanf("%d", &n); +22 recursive(0, 0, __(4)__); +23 int size = __(5)__; +24 for (int i = 0; i < size; i++) { +25 for (int j = 0; j < size; j++) +26 printf("%d", res[i][j]); +27 puts(""); +28 } +29 return 0; +30 } +``` + +( ) 34. (3分) (1)处应填 +A. `n%2`  B. 0  C. t  D. 1 + +( ) 35. (3分) (2)处应填 +A. x-step,y-step  B. x,y-step  C. x-step,y  D. $x,y$ + +( ) 36. (3分) (3)处应填 +A. x-step,y-step  B. `x+step,y+step`  C. x-step,y  D. x,y-step + +( ) 37. (3分) (4)处应填 +A. `n-1,n%2`  B. `n, 0`  C. `n,n%2`  D. n-1,0 + +( ) 38. (3分) (5)处应填 +A. $1 \ll (n+1)$  B. `1< + 2 + 3 struct point { + 4 int x, y, id; + 5 }; + 6 + 7 int equals(struct point a, struct point b){ + 8 return a.x == b.x && a.y == b.y; + 9 } +10 +11 int cmp(struct point a, struct point b){ +12 return __(1)__; +13 } +14 +15 void sort(struct point A[], int n){ +16 for (int i = 0; i < n; i++) +17 for (int j = 1; j < n; j++) +18 if (cmp(A[j], A[j - 1])){ +19 struct point t = A[j]; +20 A[j] = A[j - 1]; +21 A[j - 1] = t; +22 } +23 } +24 +25 int unique(struct point A[], int n){ +26 int t = 0; +27 for (int i = 0; i < n; i++) +28 if (__(2)__) +29 A[t++] = A[i]; +30 return t; +31 } +32 +33 int binary_search(struct point A[], int n, int x, int y){ +34 struct point p; +35 p.x = x; +36 p.y = y; +37 p.id = n; +38 int a = 0, b = n - 1; +39 while(a < b){ +40 int mid = __(3)__; +41 if (__(4)__) +42 a = mid + 1; +43 else +44 b = mid; +45 } +46 return equals(A[a], p); +47 } +48 +49 #define MAXN 1000 +50 struct point A[MAXN]; +51 +52 int main(){ +53 int n; +54 scanf("%d", &n); +55 for (int i = 0; i < n; i++){ +56 scanf("%d %d", &A[i].x, &A[i].y); +57 A[i].id = i; +58 } +59 sort(A, n); +60 n = unique(A, n); +61 int ans = 0; +62 for (int i = 0; i < n; i++) +63 for (int j = 0; j < n; j++) +64 if ( __(5)__ && binary_search(A, n, A[i].x, A[j].y) && binary_search(A, n, A[j].x, A[i].y)){ +65 ans++; +66 } +67 printf("%d\n", ans); +68 return 0; +69 } +``` + +( ) 39. (3分) (1)处应填 +A. `a.x != b.x ? a.x < b.x : a.id < b.id` +B. `a.x != b.x ? a.x < b.x : a.y < b.y` +C. `equals(a,b) ? a.id < b.id : a.x < b.x` +D. `equals(a,b) ? a.id < b.id : (a.x != b.x ? a.x < b.x : a.y < b.y)` + +( ) 40. (3分) (2)处应填 +A. `i == 0 || cmp(A[i], A[i-1])`  B. `t == 0 || equals(A[i], A[t-1])` +C. `i == 0 || !cmp(A[i], A[i-1])`  D. `t == 0 || !equals(A[i], A[t-1])` + +( ) 41. (3分) (3)处应填 +A. `b - (b-a)/2 + 1`  B. `(a+b+1) >> 1` +C. `(a+b) >> 1`  D. `a + (b-a+1)/2` + +( ) 42. (3分) (4)处应填 +A. `!cmp(A[mid], p)`  B. `cmp(A[mid], p)` +C. `cmp(p, A[mid])`  D. `!cmp(p, A[mid])` + +( ) 43. (3分) (5)处应填 +A. `A[i].x == A[j].x` +B. `A[i].id < A[j].id` +C. `A[i].x == A[j].x && A[i].id < A[j].id` +D. `A[i].x < A[j].x && A[i].y < A[j].y` diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第03套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第03套.md new file mode 100644 index 0000000..00f76cd --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第03套.md @@ -0,0 +1,395 @@ +
CSP-J 初赛模拟卷(第 03 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 以下逻辑表达式的值恒为真的是( )。 +A. `P ∨ (¬P ∧ Q) ∨ (¬P ∧ ¬Q)` +B. `Q ∨ (¬P ∧ Q) ∨ (P ∧ ¬Q)` +C. `P ∨ Q ∨ (P ∧ ¬Q) ∨ (¬P ∧ Q)` +D. `P ∨ ¬Q ∨ (P ∧ ¬Q) ∨ (¬P ∧ ¬Q)` + +( ) 2. 在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 +A. 43  B. -85  C. -43  D. -84 + +( ) 3. 二进制数 11.01 在十进制下是( )。 +A. 3.25  B. 4.125  C. 6.25  D. 11.125 + +( ) 4. 把 64 位非零浮点数强制转换成32 位浮点数后,不可能( )。 +A. 大于原数  B. 小于原数  C. 等于原数  D. 与原数符号相反 + +( ) 5. 提出“存储程序”的计算机工作原理的是( )。 +A. 克劳德·香农  B. 戈登·摩尔  C. 查尔斯·巴贝奇  D. 冯·诺依曼 + +( ) 6. 如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照 CapsLock、 字母键 A、字母键 S 和字母键 D 的顺序循环按键,即 CapsLock、A、S、D、CapsLock、A、S、D……,屏幕上输出的第 81 个 字符是字母( )。 +A. A  B. S  C. D  D. a + +( ) 7. 原字符串中任意一段连续的字符所组成的新字符串称为子串。 +则字符 “AAABBBCCC” 共有( )个不同的非空子串。 +A. 3  B. 12  C. 36  D. 45 + +( ) 8. 广度优先搜索时,需要用到的数据结构是( )。 +A. 链表  B. 队列  C. 栈  D. 散列表 + +( ) 9. 通常在搜索引擎中,对某个关键词加上双引号表示( )。 +A. 排除关键词,不显示任何包含该关键词的结果 +B. 将关键词分解,在搜索结果中必须包含其中的一部分 +C. 精确搜索,只显示包含整个关键词的结果 +D. 站内搜索,只显示关键词所指向网站的内容 + +( ) 10. 将(2, 6, 10, 17)分别存储到某个地址区间为0~10 的哈希表中,如果哈希函数= ( ),将不会产生冲突,其中表示a除以b的余数。 +A. $x$ mod 11  B. $x^{2}$ mod 11 +C. $(2x)$ mod 11  D. $\lfloor sqrt(x)\rfloor$ mod 11,其中 $\lfloor sqrt(x)\rfloor$ 表示sqrt(x)下取整 + +( ) 11. 考虑如下递归算法,则调用solve(7)得到的返回结果为( )。 +```cpp +1 solve(n) +2 if n<=1 return 1 +3 else if n>=5 return n*solve(n-2) +4 else return n*solve(n-1) +``` +A. 105  B. 840  C. 210  D. 420 + +( ) 12. 给定一个含N个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要 N-1 次比较操作。则最坏情况下,在该数组中同时找最大与 最小的数至少需要( )次比较操作。(⌈ ⌉表示向上取整,⌊ ⌋表示向下取整) +A. $\lceil 3N/2 \rceil-2$  B. $\lfloor 3N/2 \rfloor-2$  C. $2N-2$  D. $2N-4$ + +( ) 13. 一家四口人,至少两个人生日属于同一月份的概率是( )(假定每个人生日属于每个月份的概率相同且不同人之间相互独立)。 +A. `1/12`  B. `1/144`  C. `41/96`  D. `3/4` + +( ) 14. 一棵二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根结点的左子树的结点个数可能是( )。 +A. 2  B. 3  C. 4  D. 5 + +( ) 15. 2017 年 10 月 1 日是星期日,1999 年 10 月 1 日是( )。 +A. 星期三  B. 星期日  C. 星期五  D. 星期二 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 38.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 + 5 char encoder[26] = {'C','S','P',0}; + 6 char decoder[26]; + 7 + 8 string st; + 9 +10 int main() { +11 int k = 0; +12 for (int i = 0; i < 26; ++i) +13 if (encoder[i] != 0) ++k; +14 for (char x ='A'; x <= 'Z'; ++x) { +15 bool flag = true; +16 for (int i = 0; i < 26; ++i) +17 if (encoder[i] ==x) { +18 flag = false; +19 break; +20 } +21 if (flag) { +22 encoder[k]= x; +23 ++k; +24 } +25 } +26 for (int i = 0; i < 26; ++i) +27 decoder[encoder[i]- 'A'] = i + 'A'; +28 cin >> st; +29 for (int i = 0; i < st.length( ); ++i) +30 st[i] = decoder[st[i] -'A']; +31 cout << st; +32 return 0; +33 } +``` + +**判断题** + +( ) 16. (1.5分) 输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( ) + +( ) 17. (1.5分) 若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。( ) + +( ) 18. (1.5分) 将第 12 行的 `i < 26` 改为 `i < 16`,程序运行结果不会改变。( ) + +( ) 19. (1.5分) 将第 26 行的 `i < 26` 改为 `i < 16`,程序运行结果不会改变。( ) + +**单选题** + +( ) 20. (3分) 若输出的字符串为 `ABCABCABCA`,则下列说法正确的是( )。 +A. 输入的字符串中既有 S 又有 P  B. 输入的字符串中既有 S 又有 B +C. 输入的字符串中既有 A 又有 P  D. 输入的字符串中既有 A 又有 B + +( ) 21. (3分) 若输出的字符串为 `CSPCSPCSPCSP`,则下列说法正确的是( )。 +A. 输入的字符串中既有 P 又有 A  B. 输入的字符串中既有 S 又有 R +C. 输入的字符串中既有 A 又有 S  D. 输入的字符串中既无 S 又无 A + +**(2)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 int n, m; + 5 int f[101][101]; + 6 int F[101][101]; + 7 int main(){ + 8 scanf("%d%d",&n,&m);//n的值在1到100之间 + 9 memset(f,-1,sizeof(f)); +10 for(int i = 1; i <= m; i++) { +11 int u,v,w;//w的值在0到10000之间 +12 scanf("%d%d%d",&u,&v,&w); +13 f[u][v]=f[v][u]=w; +14 } +15 for(int k = 1; k <= n; k++) +16 for(int i=1;i <=n; i++) +17 for(int j=1;j<= n; j++) +18 if(f[i][k]!=-1&&f[k][j]!=-1) +19 if(f[i][j]==-1||f[i][j]>f[k][j]+f[i][k]) +20 f[i][j]=f[i][k]+f[k][j]; +21 int ans=2147483647; +22 for(int i=1;i<=n;i++) +23 for(int j=1;j<=n; j++){ +24 for(int x=1;x<=n; x++) +25 for(int y=1;y<=n; y++) +26 F[x][y]=f[x][y]; +27 F[i][j]=F[j][i]=0; +28 for(int x=1;x<= n; x++) +29 for(int y=1;y<=n; y++) +30 if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y]) +31 F[x][y]=F[x][i]+F[i][y]; +32 for(int x=1;x<=n; x++) +33 for(int y=1;y<=n; y++) +34 if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y]) +35 F[x][y]=F[x][j]+F[j][y]; +36 int res=0; +37 for(int x=1;x<=n; x++) +38 for(int y=1;y + 2 using namespace std; + 3 const int V = 101; + 4 int n, m, ans, e[V][V]; + 5 bool visited[V]; + 6 void dfs(int x, int len) + 7 { + 8 int i; + 9 visited[x] = true; +10 if (len > ans) ans = len; +11 for (i = 1; i <= n; i++) +12 if ((!visited[i]) && (e[x][i] != -1)) +13 dfs(i, len + e[x][i]); +14 visited[x] = false; +15 } +16 int main() +17 { +18 int i, j, a, b, c; +19 cin >> n >> m; +20 for (i = 1; i <= n; i++) +21 for (j = 1; j <= n; j++) +22 e[i][j] = -1; +23 for (i = 1; i <= m; i++) { +24 cin >> a >> b >> c; +25 e[a][b] = c; +26 e[b][a] = c; +27 } +28 for (i = 1; i <= n; i++) +29 visited[i] = false; +30 ans = 0; +31 for (i = 1; i <= n; i++) +32 dfs(i, 0); +33 cout << ans << endl; +34 return 0; +35 } +``` + +输入表示一个没有重边、自环的无向图,顶点编号为 1 到 $n$,且 $1\le n\le100$、边权为正整数。 + +**判断题** + +( ) 28. (1.5分) 第 19 行的输入中,如果满足 $m=n(n-1)/2$,则第 20~22 行的初始化可以省略。( ) + +( ) 29. (1.5分) 将第 31 行改为 `for (i = n; i >= 1; i--)`,程序结果不受影响。( ) + +**单选题** + +( ) 30. (1.5分) 若输入如下,则程序输出为( )。 +```text +4 2 +1 2 1 +3 4 1 +``` + +A. 8  B. 4  C. 2  D. 1 + +( ) 31. (3分) 若输入如下,则程序输出为( )。 +```text +4 6 +1 2 1 +2 3 1 +3 4 1 +4 1 1 +1 3 1 +2 4 1 +``` + +A. 1  B. 3  C. 5  D. 7 + +( ) 32. (3分) 若输入如下,则程序输出为( )。 +```text +4 3 +1 2 10 +2 3 20 +3 1 30 +``` + +A. 30  B. 50  C. 90  D. 120 + +( ) 33. (3分) 若输入如下,则程序输出为( )。 +```text +4 6 +1 2 10 +2 3 20 +3 4 30 +4 1 40 +1 3 50 +2 4 60 +``` + +A. 60  B. 100  C. 150  D. 200 + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 29 分,各小题分值见题目)** + +**(1)** + +(封禁xxs)现有n个xxs(编号为1到n),每个xxs都有一个关注者,第i个xxs的关注者是a_i。现在管理员要将其中的一些xxs的账号封禁,但需要注意的是如果封禁了第i个人,那么为了不打草惊蛇,就不能封禁他的关注者a_i。现在想知道最多可以封禁多少个xxs。 +输入第一行是一个不超过300000的整数n,第二行是n个1到n的整数表示。 +输出一行,一个整数表示答案。 + +```cpp + 1 #include + 2 using namespace std; + 3 #define MAXN 300005 + 4 int n, ans=0, a[MAXN], in[MAXN]={0}; + 5 bool vis[MAXN]={0}; + 6 void dfs(int cur, int w){ + 7 if(vis[cur]) + 8 return; + 9 vis[cur]=true; +10 if(w==1) ans++; +11 __(1)__ +12 if(__(2)__) +13 dfs(a[cur], __(3)__); +14 } +15 int main(){ +16 scanf("%d",&n); +17 for(int i=1;i <=n; i++) { +18 scanf("%d", &a[i]); +19 in[a[i]]++; +20 } +21 for(int i=1;i <= n; i++) +22 if(!in[i]) __(4)__; +23 for(int i=1;i<=n; i++) +24 if(__(5)__) dfs(i,0); +25 printf("%d\n",ans); +26 return 0; +27 } +``` + +( ) 34. (3分) (1)处应填 +A. `a[cur]=cur;`  B. `in[a[cur]]=0;`  C. `in[a[cur]]--;`  D. `in[cur]--;` + +( ) 35. (3分) (2)处应填 +A. `in[a[cur]] != 0 || w == 1`  B. `in[a[cur]==0 | w==0` +C. `in[a[cur]!=0 | w==0`  D. `in[a[cur]]==0 | w==1` + +( ) 36. (3分) (3)处应填 +A. 0  B. 1  C. w  D. 1-w + +( ) 37. (3分) (4)处应填 +A. `dfs(i,1)`  B. `dfs(i, 0)`  C. `dfs(a[i], 1)`  D. `dfs(a[i], 0)` + +( ) 38. (3分) (5)处应填 +A. `!in[i]`  B. `in[i]`  C. `!vis[i]`  D. `vis[l]` + +**(2)** + +完善程序: + +(二叉查找树)二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值。小于其右子树上所有节点的值。试判断一棵树是否为二叉查找树。输入的第一行包含一个整数 $n$,表示这棵树有 $n$ 个顶点,编号分别为 $1,2,\dots ,n$,其中编号为1的为根结点。之后的第1行有三个数value, left_child, right_child,分别表示该节点关键字的值、左子节点的编号、右子节点的编号;如果不存在左子节点或右子节点,则用0代替。输出1表示这棵树是二叉查找树,输出0则表示不是。 + +```cpp + 1 #include + 2 using namespace std; + 3 const int SIZE = 100; + 4 const int INFINITE = 1000000; + 5 struct node + 6 { + 7 int left_child, right_child, value; + 8 }; node a[SIZE]; + 9 int is_bst( int root, int lower_bound, int upper_bound ) +10 { +11 int cur; +12 if ( root == 0 ) +13 return(1); +14 cur = a[root].value; +15 if ( (cur > lower_bound) && ( __(1)__ ) && (is_bst( a[root].left_child, lower_bound, cur ) == 1) && (is_bst( __(2)__, __(3)__, __(4)__ ) == 1) ) +16 return(1); +17 return(0); +18 } +19 int main() +20 { +21 int i, n; cin >> n; +22 for ( i = 1; i <= n; i++ ) +23 cin >> a[i].value >> a[i].left_child >> a[i].right_child; +24 cout << is_bst( __(5)__, -INFINITE, INFINITE ) << endl; +25 return(0); +26 } +``` + +| P/Q | Q为true | Q为false | +| --- | --- | --- | +| P为true | P=1&&Q=1 | P=1&&Q=0 | +| P为false | P=0&&Q=1 | P=0&&Q=0 | + +( ) 39. (3分) (1)处应填:________________ + +( ) 40. (3分) (2)处应填:________________ + +( ) 41. (3分) (3)处应填:________________ + +( ) 42. (3分) (4)处应填:________________ + +( ) 43. (2分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第04套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第04套.md new file mode 100644 index 0000000..b324ce6 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第04套.md @@ -0,0 +1,361 @@ +
CSP-J 初赛模拟卷(第 04 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. Linux下可执行文件的默认扩展名为( )。 +A. exe  B. com  C. dll  D. 以上都不是 + +( ) 2. 冒泡排序算法的伪代码如下。 +输入:长度为 n 的数组 L。输出:按非递减顺序排序的 L。 +```text +1 FLAG ← n +2 while FLAG > 1 do +3 k ← FLAG - 1 +4 FLAG ← 1 +5 for j = 1 to k do +6 if L(j) > L(j+1) then +7 L(j) ↔ L(j+1) +8 FLAG ← j +``` +对 n 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( ) +A. n²  B. n - 2  C. n - 1  D. n + +( ) 3. 地址总线的位数决定了 CPU 可直接寻址的内存空间大小,例如地址总线为 16 位,其最大的可寻址空间为 64KB。如果地址总线是 32 位,则理论上最大可寻址的内存空间为( )。 +A. 128KB  B. 1MB  C. 1GB  D. 4GB + +( ) 4. 无向完全图是图中每对顶点之间都恰好有一条边的简单图。已知无向完全图G有7个顶点,则它共有( )条边。 +A. 7  B. 21  C. 42  D. 49 + +( ) 5. 下列说法正确的是( )。 +A. CPU的主要任务是执行数据运算和程序控制 +B. 存储器具有记忆能力,其中信息任何时候都不会丢失 +C. 两个显示器屏幕尺寸相同,则它们的分辨率必定相同 +D. 个人用户只能使用 Wifi 的方式连接到 Internet + +( ) 6. 以A0作为起点,对下面的无向图进行深度优先遍历时,遍历顺序不可能是( )。 +题目图示 + +A. $A_0,A_1,A_2,A_3$  B. $A_0,A_1,A_3,A_2$  C. $A_0,A_2,A_1,A_3$  D. $A_0,A_3,A_1,A_2$ + +( ) 7. 完全二叉树的顺序存储方案,是指将完全二叉树的结点从上至下、从左至右依次存放到一个顺序结构的数组中。假定根结点存放在数组的1号位置,则第k号结点的父结点如果存在的话,应当存放在数组的( )号位置。 +A. 2k  B. `2k+1`  C. `k/2下取整`  D. `(k+1)/2下取整` + +( ) 8. 下列几个32位IP地址中,书写错误的是( )。 +A. 162.105.135.27  B. 192.168.0.1  C. 256.256.129.1  D. 10.0.0.1 + +( ) 9. 设 $X$ 、 $Y$ 、 $Z$ 分别代表三进制下的一位数字,若等式 $XY + ZX = XYX$ 在三进制下成立,那么同样在三进制下,等式$XY*ZX = ()$ 也成立。 +A. YXZ  B. ZXY  C. XYZ  D. XZY + +( ) 10. 有7个一模一样的苹果,放到3个一样的盘子中,盘子可以为空,一共有( )种放法。 +A. 7  B. 8  C. 21  D. $3^7$ + +( ) 11. 现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。若待合并结点权值相同,优先选取由其他结点合并形成的结点。那么,“也”字的编码长度可能是( )。 +A. 1  B. 2  C. 3  D. 4 + +( ) 12. 某算法的计算时间表示为递推关系式 $T(n) = T(n - 1) + n(n$ 为正整数)及 $T(0) = 1$,则该算法的时间复杂度为( )。 +A. $O(\log n)$  B. $O(n\log n)$  C. $O(n)$  D. $O(n^2)$ + +( ) 13. 下图表示一个果园灌溉系统,有 A、B、C、D 四个阀门,每个阀门可以打开或关上,所有管道粗细相同,以下设置阀门的方法中,可以让果树浇上水的是( )。 +题目图示 + +A. B 打开,其他都关上  B. AB 都打开,CD 都关上 +C. A 打开,其他都关上  D. D 打开,其他都关上 + +( ) 14. 10000 以内,与 10000 互质的正整数有( )个。 +A. 2000  B. 4000  C. 6000  D. 8000 + +( ) 15. 一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9, 9颠倒过来看还是6,其他数字颠倒过来都不构成数字。 +类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901。假设某个城市的车牌只由5位数字组成,每一位都可以取0到9。 +请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?( ) +A. 60  B. 125  C. 75  D. 100 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 42 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 int main() + 4 { + 5 const int SIZE=10; + 6 int height[SIZE],num[SIZE],n,ans; + 7 cin>>n; + 8 for(int i=0;i>height[i]; +10 num[i]=1; +11 for(int j=0;j=num[i])) +13 num[i]=num[j]+1; +14 } +15 } +16 ans=0; +17 for(int i=0;ians) ans=num[i]; +19 } +20 cout<=num[i]"改为"num[j]>num[i]", 程序的输出结果不会改变。( ) + +( ) 19. (1.5分) 将18行"num[i]>ans"改为"num[i]>=ans", 程序的输出结果不会改变。( ) + +**单选题** + +( ) 20. (3分) 若输入的数据为 +10 +1 1 1 1 1 1 1 1 1 1 +则程序的输出结果是( )。 +A. 4  B. 3  C. 2  D. 1 + +( ) 21. (3分) 若输人的数据为 +10 +3 2 5 11 12 7 4 10 15 6 +因程序的输出结果是( )。 +A. 4  B. 5  C. 6  D. 7 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 const int maxn = 10000; + 4 int n; + 5 int a[maxn]; + 6 int b[maxn]; + 7 int f(int l, int r, int depth) { + 8 if (l > r) + 9 return 0; +10 int min = a[l], mink = l; +11 for (int i = l; i <= r; ++i) { +12 if (min > a[i]) { +13 min = a[i]; +14 mink = i; +15 } +16 } +17 int lres = f(l, mink - 1, depth + 1); +18 int rres = f(mink + 1, r, depth + 1); +19 return lres + rres + depth * b[mink]; +20 } +21 int main() { +22 cin >> n; +23 for (int i = 0; i < n; ++i) +24 cin >> a[i]; +25 for (int i = 0; i < n; ++i) +26 cin >> b[i]; +27 cout << f(0, n - 1, 1) << endl; +28 return 0; +29 } +``` + +**判断题** + +( ) 22. (1.5分) 如果a数组有重复的数字,则程序运行时会发生错误。( ) + +( ) 23. (1.5分) 如果b数组全为0,则输出为0。( ) + +**单选题** + +( ) 24. (3分) 当 $n = 100$ 时,最坏情况下,与第12行的比较运算执行的次数最接近的是:( )。 +A. 5000  B. 600  C. 6  D. 100 + +( ) 25. (3分) 当n=100时,最好情况下,与第12行的比较运算执行的次数最接近的是:( )。 +A. 100  B. 6  C. 5000  D. 600 + +( ) 26. (3分) 当 $n = 10$ 时,若 $b$ 数组满足,对任意 $0 < = i < n,$ 都有 $b[i] = i + 1,$ 那么输出最大为( )。 +A. 386  B. 383  C. 384  D. 385 + +( ) 27. (4分) 当n=100时,若b数组满足,对任意 $0<=i + 2 using namespace std; + 3 #define MOD 19260817 + 4 #define MAXN 1005 + 5 long long A[MAXN][MAXN]={0},sum[MAXN][MAXN]={0}; + 6 int n, m, q; + 7 int main(){ + 8 A[1][1]=A[1][0]=1; + 9 for(int i=2;i <= 1000; i++) { +10 A[i][0]=1; +11 for(int j = 1; j <= i; j++) +12 A[i][j]=(A[i-1][j]+A[i-1][j-1])%MOD; +13 } +14 for(int i =1;i <= 1000; i++) +15 for(int j=1;j<=1000;j++) +16 sum[i][j]=(sum[i-1][j]+sum[i][j-1] +17 -sum[i-1][j-1]+A[i][j]+MOD)%MOD; +18 int q; +19 cin >> q; +20 while(q--){ +21 int n, m; +22 cin >> n >> m; +23 cout << sum[n][m] << endl; +24 } +25 return 0; +26 } +``` + +**判断题** + +( ) 28. (1分) 当i<=j时,A[i][i]的值是0。( ) + +( ) 29. (2分) 当i>j时,A[i][j]的值相当于从i个不同元素中取出j个元素的排列数。( ) + +( ) 30. (2分) sum[i][j]的值(16的正整数,表示每条绳子的长度,第三行是一个不超过108的正整数m。 输出:绳段的最大长度,若无法切割,输出Failed。 + +```cpp + 1 #include + 2 using namespace std; + 3 int n, m, i, lbound, ubound, mid, count; + 4 int len[100]; // 绳子长度 + 5 int main() + 6 { + 7 cin >> n; + 8 count = 0; + 9 for (i = 0; i < n; i++) +10 { +11 cin >> len[i]; +12 __(1)__; +13 } +14 cin >> m; +15 if (__(2)__) +16 { +17 cout << "Failed" << endl; +18 return 0; +19 } +20 lbound = 1; +21 ubound = 1000000; +22 while (__(3)__) +23 { +24 mid = __(4)__; +25 count = 0; +26 for (i = 0; i < n; i++) +27 __(5)__; +28 if (count < m) +29 ubound = mid - 1; +30 else +31 lbound = mid; +32 } +33 cout << lbound << endl; +34 return 0; +35 } +``` + +( ) 34. (2.5分) (1)处应填:________________ + +( ) 35. (2.5分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +( ) 38. (3分) (5)处应填:________________ + +**(2)** + +完善程序 + +(排列数)输入两个正整数 $n$ , $m(1 < n < 20, 1 < m < n)$ ,在 $1 \sim n$ 中任取 $m$ 个数,按字典序从小到大输出所有这样的排列。 + +例如:输入:32 + +输出: + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 const int SIZE =25; + 5 bool used[SIZE]; + 6 int data[SIZE]; + 7 int n,m,i,j,k; + 8 bool flag; + 9 int main() +10 { +11 cin>>n>>m; +12 memset(used,false,sizeof(used)); +13 for(i=1;i<=m;i++) +14 { +15 data[i]=i; +16 used[i]=true; +17 } +18 flag=true; +19 while(flag) +20 { +21 for(i=1;i<=m-1;i++) cout<=1;i--) +25 { +26 __(2)__; +27 for(j=data[i]+1;j<=n;j++) +28 if(!used[j]) +29 { +30 used[j]=true; +31 data[i]=__(3)__ ; +32 flag=true; +33 break; +34 } +35 if(flag) +36 { +37 for(k=i+1;k<=m;k++) +38 for(j=1;j<= __(4)__;j++) +39 if(!used[j]) +40 { +41 data[k]=j; +42 used[j]=true; +43 break; +44 } +45 __(5)__; +46 } +47 } +48 } +49 return 0; +50 } +``` + +( ) 39. (3分) (1)处应填:________________ + +( ) 40. (3分) (2)处应填:________________ + +( ) 41. (3分) (3)处应填:________________ + +( ) 42. (3分) (4)处应填:________________ + +( ) 43. (3分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第05套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第05套.md new file mode 100644 index 0000000..f393401 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第05套.md @@ -0,0 +1,442 @@ +
CSP-J 初赛模拟卷(第 05 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。 +A. 1983  B. 1984  C. 1985  D. 1986 + +( ) 2. 一个 32 位整型变量占用( )个字节。 +A. 4  B. 8  C. 32  D. 128 + +( ) 3. 下列四个不同进制的数中,与其它三项数值上不相等的是 +A. `(269)16`  B. `(617)10`  C. `(1151)8`  D. `(1001101011)2` + +( ) 4. 根节点深度为0,一棵深度为h的满 $k(k > 1)$ 又树,即除最后一层无任何子节点外,每一层上的所有结点都有 $k$ 个子结点的树,共有( )个结点。 +A. $(k^{h + 1} - 1) / (k - 1)$  B. $k^{h - 1}$  C. $k^h$  D. $k^{h - 1} / (k - 1)$ + +( ) 5. 若有如下程序段,其中 s,a,b,c 均已定义为整型变量,且 a,c 均已赋值 (c大于 0)。 +s = a; +for (b = 1;b <= c; b++ ) +s = s + 1; +则与上述程序段修改 s 值的功能等价的赋值语句是( )。 +A. `s = a + b;`  B. `s = a + c;`  C. `s = s + c;`  D. `s = b + c;` + +( ) 6. 现有一张分辨率为2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?( )。 +A. 16MB  B. 4MB  C. 8MB  D. 2MB + +( ) 7. 设简单无向图 G 有 16 条边且每个顶点的度数都是 2,则图 G 有( )个顶点。 +A. 10  B. 12  C. 8  D. 16 + +( ) 8. 要求以下程序的功能是计算:s=1+1/2+1/3+...+1/10. +```cpp +#include +using namespace std; +int main() +{ + int n; + float s; + s = 1.0; + for(n = 10; n > 1; n--) + s = s + 1 / n; + cout << s << endl; + return 0; +} +``` +程序运行后输出结果错误,导致错误结果的程序行是( )。 +A. `s = 1.0;`  B. `for(n = 10; n > 1; n--)` +C. `s = s + 1 / n;`  D. `cout << s << endl;` + +( ) 9. 在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 +A. 43  B. -85  C. -43  D. -84 + +( ) 10. 有五副不同颜色的手套(共 10 只手套,每副手套左右手各 1 只),一次性从中取 6 只手套,请问恰好能配成两副手套的不同取法有( )种。 +A. 120  B. 180  C. 150  D. 30 + +( ) 11. 如果根的高度为 1,具有 61 个结点的完全二叉树的高度为( )。 +A. 5  B. 6  C. 7  D. 8 + +( ) 12. 下列几个32位IP地址中,书写错误的是( )。 +A. 162.105.135.27  B. 192.168.0.1  C. 256.256.129.1  D. 10.0.0.1 + +( ) 13. 寄存器是( )的重要组成部分. +A. 硬盘  B. 高速缓存  C. 内存  D. 中央处理器(CPU) + +( ) 14. 下列协议中与电子邮件无关的是( )。 +A. POP3  B. SMTP  C. WTO  D. IMAP + +( ) 15. 周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。假设做每道菜的顺序都是:先洗菜10分钟,然后切菜10分钟,最后炒菜10分钟。那么做一道菜需要30分钟。注意:两道不同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗,也不能同时切。那么做完三道菜的最短时间需要( )分钟。 +A. 90  B. 60  C. 50  D. 40 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 37.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 + 5 char encoder[26] = {'C','S','P',0}; + 6 char decoder[26]; + 7 + 8 string st; + 9 +10 int main() { +11 int k = 0; +12 for (int i = 0; i < 26; ++i) +13 if (encoder[i] != 0) ++k; +14 for (char x ='A'; x <= 'Z'; ++x) { +15 bool flag = true; +16 for (int i = 0; i < 26; ++i) +17 if (encoder[i] ==x) { +18 flag = false; +19 break; +20 } +21 if (flag) { +22 encoder[k]= x; +23 ++k; +24 } +25 } +26 for (int i = 0; i < 26; ++i) +27 decoder[encoder[i]- 'A'] = i + 'A'; +28 cin >> st; +29 for (int i = 0; i < st.length( ); ++i) +30 st[i] = decoder[st[i] -'A']; +31 cout << st; +32 return 0; +33 } +``` + +**判断题** + +( ) 16. (1.5分) 输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( ) + +( ) 17. (1.5分) 若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。( ) + +( ) 18. (1.5分) 将第 12 行的 `i < 26` 改为 `i < 16`,程序运行结果不会改变。( ) + +( ) 19. (1.5分) 将第 26 行的 `i < 26` 改为 `i < 16`,程序运行结果不会改变。( ) + +**单选题** + +( ) 20. (3分) 若输出的字符串为 `ABCABCABCA`,则下列说法正确的是( )。 +A. 输入的字符串中既有 S 又有 P  B. 输入的字符串中既有 S 又有 B +C. 输入的字符串中既有 A 又有 P  D. 输入的字符串中既有 A 又有 B + +( ) 21. (3分) 若输出的字符串为 `CSPCSPCSPCSP`,则下列说法正确的是( )。 +A. 输入的字符串中既有 P 又有 A  B. 输入的字符串中既有 S 又有 R +C. 输入的字符串中既有 A 又有 S  D. 输入的字符串中既无 S 又无 A + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n; + 4 int a[100]; + 5 + 6 int main() { + 7 scanf("%d", &n); + 8 for (int i = 1; i <= n; ++i) + 9 scanf("%d", &a[i]); +10 int ans = 1; +11 for (int i = 1; i <= n; ++i) { +12 if (i > 1 && a[i] < a[i - 1]) +13 ans = i; +14 while (ans < n && a[i] >= a[ans + 1]) +15 ++ans; +16 printf("%d\n", ans); +17 } +18 return 0; +19 } +``` + +**判断题** + +( ) 22. (1分) 第16行输出ans时,ans的值一定大于i。( ) + +( ) 23. (1分) 程序输出的ans小于等于n。( ) + +( ) 24. (1.5分) 若将第12行的 $<$ 改为 $!=$ ,程序输出的结果不会改变。( ) + +( ) 25. (1.5分) 当程序执行到第16行时,若ans-i>2,则 $a[i+1]\leq a[i]$ 。( ) + +**单选题** + +( ) 26. (3分) 若输入的a数组是一个严格单调递增的数列,此程序的时间复杂度( ) +A. `O(log n)`  B. `O(n^2)`  C. `O(n log n)`  D. `O(n)` + +( ) 27. (4分) 最坏情况下,此程序的时间复杂度是( ) +A. `O(n^2)`  B. `O(log n)`  C. `O(n)`  D. `O(n log n)` + +**(3)** + +```cpp + 1 #include + 2 using namespace std; + 3 const int V = 101; + 4 int n, m, ans, e[V][V]; + 5 bool visited[V]; + 6 void dfs(int x, int len) + 7 { + 8 int i; + 9 visited[x] = true; +10 if (len > ans) ans = len; +11 for (i = 1; i <= n; i++) +12 if ((!visited[i]) && (e[x][i] != -1)) +13 dfs(i, len + e[x][i]); +14 visited[x] = false; +15 } +16 int main() +17 { +18 int i, j, a, b, c; +19 cin >> n >> m; +20 for (i = 1; i <= n; i++) +21 for (j = 1; j <= n; j++) +22 e[i][j] = -1; +23 for (i = 1; i <= m; i++) { +24 cin >> a >> b >> c; +25 e[a][b] = c; +26 e[b][a] = c; +27 } +28 for (i = 1; i <= n; i++) +29 visited[i] = false; +30 ans = 0; +31 for (i = 1; i <= n; i++) +32 dfs(i, 0); +33 cout << ans << endl; +34 return 0; +35 } +``` + +输入表示一个没有重边、自环的无向图,顶点编号为 1 到 $n$,且 $1\le n\le100$、边权为正整数。 + +**判断题** + +( ) 28. (1.5分) 第 19 行的输入中,如果满足 $m=n(n-1)/2$,则第 20~22 行的初始化可以省略。( ) + +( ) 29. (1.5分) 将第 31 行改为 `for (i = n; i >= 1; i--)`,程序结果不受影响。( ) + +**单选题** + +( ) 30. (1.5分) 若输入如下,则程序输出为( )。 +```text +4 2 +1 2 1 +3 4 1 +``` + +A. 8  B. 4  C. 2  D. 1 + +( ) 31. (3分) 若输入如下,则程序输出为( )。 +```text +4 6 +1 2 1 +2 3 1 +3 4 1 +4 1 1 +1 3 1 +2 4 1 +``` + +A. 1  B. 3  C. 5  D. 7 + +( ) 32. (3分) 若输入如下,则程序输出为( )。 +```text +4 3 +1 2 10 +2 3 20 +3 1 30 +``` + +A. 30  B. 50  C. 90  D. 120 + +( ) 33. (3分) 若输入如下,则程序输出为( )。 +```text +4 6 +1 2 10 +2 3 20 +3 4 30 +4 1 40 +1 3 50 +2 4 60 +``` + +A. 60  B. 100  C. 150  D. 200 + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 31 分,各小题分值见题目)** + +**(1)** + +(最小区间覆盖)给出 $n$ 个区间,第 $i$ 个区间的左右端点是 $[a_i, b_i]$。现在要在这些区间中选出若干个,使得区间 $[0, m]$ 被所选区间的并覆盖(即每一个 $0 \leq i \leq m$ 部在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。 + +输入第一行包含两个整数 $n$ 和 $m$ ($1 \leq n \leq 5000, 1 \leq m \leq 10^3$)接下来 $n$ 行,每行两个整数 $a_i, b_i (0 \leq a_i, b_i \leq m)$。提示:使用贪心法解决这个问题。先用 $O(n^2)$ 的时间复杂度排序,然后贪心选择这些区间。试补全程序。 + +```cpp + 1 #include + 2 + 3 using namespace std; + 4 + 5 const int MAXN = 5000; + 6 int n, m; + 7 struct segment { int a, b; } A[MAXN]; + 8 + 9 void sort() // 排序 +10 { +11 for (int i = 0; i < n; i++) +12 for (int j = 1; j < n; j++) +13 if (__(1)__) +14 { +15 segment t = A[j]; +16 __(2)__ +17 } +18 } +19 +20 int main() +21 { +22 cin >> n >> m; +23 for (int i = 0; i < n; i++) +24 cin >> A[i].a >> A[i].b; +25 sort(); +26 int p = 1; +27 for (int i = 1; i < n; i++) +28 if (__(3)__) +29 A[p++] = A[i]; +30 n = p; +31 int ans =0, r = 0; +32 int q = 0; +33 while (r < m) +34 { +35 while (__(4)__) +36 q++; +37 __(5)__; +38 ans++; +39 } +40 cout << ans << endl; +41 return 0; +42 } +``` + +( ) 34. (3分) (1)处应填 +A. `A[j].b>A[j-1].b`  B. `A[j].aA[j-1].a`  D. `A[j].bA[p-1].b`  B. `A[i].bA[i-1].b`  D. `A[i].b + 2 using namespace std; + 3 const int SIZE = 100; + 4 int matrix[SIZE + 1][SIZE + 1]; + 5 int rowsum[SIZE + 1][SIZE + 1]; /* rowsum[i][j]记录第i行前j个数的和 */ + 6 int m, n, i, j, first, last, area, ans; + 7 int main() + 8 { + 9 cin >> m >> n; +10 for ( i = 1; i <= m; i++ ) +11 for ( j = 1; j <= n; j++ ) +12 cin >> matrix[i][j]; +13 ans = matrix __(1)__; +14 for ( i = 1; i <= m; i++ ) +15 __(2)__; +16 for ( i = 1; i <= m; i++ ) +17 for ( j = 1; j <= n; j++ ) +18 rowsum[i][j] = __(3)__; +19 for ( first = 1; first <= n; first++ ) +20 for ( last = first; last <= n; last++ ) +21 { +22 __(4)__; +23 for ( i = 1; i <= m; i++ ) +24 { +25 area += __(5)__; +26 if ( area > ans ) +27 ans = area; +28 if ( area < 0 ) +29 area = 0; +30 } +31 } +32 cout << ans << endl; +33 return(0); +34 } +``` + +( ) 39. (3分) (1)处应填:________________ + +( ) 40. (3分) (2)处应填:________________ + +( ) 41. (3分) (3)处应填:________________ + +( ) 42. (3分) (4)处应填:________________ + +( ) 43. (4分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第06套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第06套.md new file mode 100644 index 0000000..0f3805c --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第06套.md @@ -0,0 +1,336 @@ +
CSP-J 初赛模拟卷(第 06 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. NOI 的中文意思是( )。 +A. 中国信息学联赛  B. 全国青少年信息学奥林匹克竞赛 +C. 中国青少年信息学奥林匹克竞赛  D. 中国计算机协会 + +( ) 2. 1TB代表的字节数是( )。 +A. 2的10次方  B. 2的20次方  C. 2的30次方  D. 2的40次方 + +( ) 3. 二进制数11 1011 1001 0111和01 0110 1110 1011进行逻辑与运算的结果是( )。 +A. 01 0010 1000 1011  B. 01 0010 1001 0011 +C. 01 0010 1000 0001  D. 01 0010 1000 0011 + +( ) 4. 如果根结点的深度记为1,则一棵恰有2011个叶结点的二叉树的深度最少是( )。 +A. 10  B. 11  C. 12  D. 13 + +( ) 5. 给定含有 n 个互不相同元素的单峰数组 L,满足先严格递增、后严格递减,峰顶位于数组内部。用下面的二分算法寻找峰顶,请将 a、b、c 三行代码依次填入空白处。正确的填空顺序是( )。 + +```text +a. return Search(k + 1, r) +b. return Search(l, k - 1) +c. return L[k] + +Search(l, r): + if l == r then return L[l] + k = floor((l + r) / 2) + if L[k] > L[k - 1] and L[k] > L[k + 1]: ______ + else if L[k] < L[k + 1]: ______ + else: ______ + +调用 Search(2, n - 1) +``` + +A. c,a,b  B. c,b,a  C. a,b,c  D. b,a,c + +( ) 6. 10 个三好学生名额分配到 7 个班级,每个班级至少有一个名额,一共有( )种不同的分配方案。 +A. 84  B. 72  C. 56  D. 504 + +( ) 7. 6 个顶点的连通图的最小生成树,其边数为( )。 +A. 6  B. 5  C. 7  D. 4 + +( ) 8. 设变量x为非负float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是( )。 +A. `x = (x * 100) + 0.5 / 100.0;`  B. `x = (x * 100 + 0.5) / 100.0;` +C. `x = (int)(x * 100 + 0.5)/100.0;`  D. `x = (x / 100 + 0.5) * 100.0;` + +( ) 9. 二进制数 00100100 和 00010100 的和是( )。 +A. 00101000  B. 01100111  C. 01000100  D. 00111000 + +( ) 10. 以下关于字符串的判定语句中正确的是( )。 +A. 字符串是一种特殊的线性表  B. 串的长度必须大于零 +C. 字符串不可以用数组来表示  D. 空格字符组成的串就是空串 + +( ) 11. ( )是一种先进先出的线性表。 +A. 栈  B. 队列  C. 哈希表(散列表)  D. 二叉树 + +( ) 12. 设 $x=true,y=true,z=false$,以下逻辑运算表达式值为真的是( )。 +A. $(y\lor z)\wedge x\wedge z$  B. $x\wedge (z\lor y)\wedge z$  C. $(x\wedge y)\wedge z$  D. $(x\wedge y)\vee (z\vee x)$ + +( ) 13. 以下哪一种设备属于输出设备( )。 +A. 扫描仪  B. 键盘  C. 鼠标  D. 打印机 + +( ) 14. 在 Windows 资源管理器中,用鼠标右键单击一个文件时,会出现一个名为“复制”的操作选项,它的意思是( )。 +A. 用剪切板中的文件替换该文件 +B. 在该文件所在文件夹中,将该文件克隆一份 +C. 将该文件复制到剪切板,并保留原文件 +D. 将该文件复制到剪切板,并删除原文件 + +( ) 15. 甲、乙、丙三位同学选修课程,从 4 门课程中,甲选修 2 门,乙、丙各选修3门,则不同的选修方案共有( )种。 +A. 36  B. 48  C. 96  D. 192 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 39.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 #define MAXN 20 + 4 int gu[MAXN][MAXN]; + 5 int luo(int n, int m) { + 6 if(n <= 1 || m < 2) + 7 return 1; + 8 if(gu[n][m] != -1) + 9 return gu[n][m]; +10 int ans=0; +11 for(int i = 0; i > n >> m; +19 for(int i = 0; i < MAXN; i++) +20 for(int j = 0; j < MAXN; j++) +21 gu[i][j]= -1; +22 cout << luo(n, m); +23 return 0; +24 } +``` + +**判断题** + +( ) 16. (1分) luo函数中,m的值不可能是奇数。( ) + +( ) 17. (1分) 若将第11行的“<”改为“<=”,程序的输出结果可能会改变。( ) + +( ) 18. (2分) 若将第8、9、13行删除,程序的运行的结果不变。( ) + +( ) 19. (2分) 在添加合适的头文件后,将第19到21行替换为"memset(gu, 255,sizeof(gu));"可以起到相同的作用。( ) + +**单选题** + +( ) 20. (4分) 若输入数据为 4 8,则输出为( )。 +A. 7  B. 8  C. 15  D. 16 + +( ) 21. (3分) 最坏情况下,此程序的时间复杂度是( )。 +A. `O(m²n)`  B. `O(nm!)`  C. `O(n²)`  D. `O(n²m)` + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n,m,i,j,p,k; + 4 int a[100],b[100]; + 5 int main() + 6 { + 7 cin>>n>>m; + 8 a[0]=n;i=0;p=0;k=1; + 9 do{ +10 for(j=0;j + 2 #include + 3 using namespace std; + 4 + 5 int n; + 6 int d[50][2]; + 7 int ans; + 8 + 9 void dfs(int n, int sum) { +10 if (n == 1) { +11 ans = max(sum, ans); +12 return; +13 } +14 for (int i = 1; i < n; ++i) { +15 int a = d[i - 1][0], b = d[i - 1][1]; +16 int x = d[i][0], y = d[i][1]; +17 d[i - 1][0] = a + x; +18 d[i - 1][1] = b + y; +19 for (int j = i; j < n - 1; ++j) +20 d[j][0] = d[j + 1][0], d[j][1] = d[j + 1][1]; +21 int s = a + x + abs(b - y); +22 dfs(n - 1, sum + s); +23 for (int j = n - 1; j > i; --j) +24 d[j][0] = d[j - 1][0], d[j][1] = d[j - 1][1]; +25 d[i - 1][0] = a, d[i - 1][1] = b; +26 d[i][0] = x, d[i][1] = y; +27 } +28 } +29 +30 int main() { +31 cin >> n; +32 for (int i = 0; i < n; ++i) +33 cin >> d[i][0]; +34 for (int i = 0; i < n;++i) +35 cin >> d[i][1]; +36 ans = 0; +37 dfs(n, 0); +38 cout << ans << endl; +39 return 0; +40 } +``` + +假设输入的 $n$ 是不超过50的正整数,$d[i][0], d[i][i]$ 都是不超过10000的正整数,完成下面的判断题和单选题 + +**判断题** + +( ) 28. (1.5分) 若输入 n 为 0,此程序可能会死循环或发生运行错误。( ) + +( ) 29. (1.5分) 若输入 $n$ 为20,接下来的输入全为0,则输出为0。( ) + +( ) 30. (1.5分) 输出的数一定不小于输入的 $d[i][0]$ 和 $d[i][1]$ 的任意一个。( ) + +**单选题** + +( ) 31. (3分) 若输入的 $n$ 为20,接下来的输入是20个9和20个0,则输出为( )。 +A. 1890  B. 1881  C. 1908  D. 1917 + +( ) 32. (3分) 若输入的 $n$ 为30,接下来的输入是30个0和30个5,则输出为( )。 +A. 2000  B. 2010  C. 2030  D. 2020 + +( ) 33. (4分) 若输入的 $n$ 为15,接下来的输入是15到1,以及15到1,则输出为( )。 +A. 2440  B. 2220  C. 2240  D. 2420 + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 9 小题,共计 26 分,各小题分值见题目)** + +**(1)** + +完善程序: +(数字删除)下面程序的功能是将字符串中的数字字符删除后输出。请填空。 + +```cpp + 1 #include + 2 using namespace std; + 3 int delnum( char *s ) + 4 { + 5 int i, j; + 6 j = 0; + 7 for ( i = 0; s[i] != '\0'; i++ ) + 8 if ( s[i] < '0' __(1)__ s[i] > '9' ) + 9 { +10 s[j] = s[i]; +11 __(2)__; +12 } +13 return(__(3)__); +14 } +15 const int SIZE = 30; +16 int main() +17 { +18 char s[SIZE]; +19 int len, i; +20 cin.getline( s, sizeof(s) ); +21 len = delnum( s ); +22 for ( i = 0; i < len; i++ ) +23 cout << __(4)__; +24 cout << endl; +25 return 0; +26 } +``` + +( ) 34. (3分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +**(2)** + +对于一个1到 $n$ 的排列 $P$ (即1到 $n$ 中每一个数在 $P$ 中出现了恰好一次),令 $q[i] = \text{第} i$ 个位置之后第一个比 $P[i]$ 值更大的位置,如果不存在这样的位置,则$q[i] = n + 1$ 。举例来说,如果 $n = 5$ 且 $P$ 为15423,则 $q$ 为26656。 + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 const int N = 100010; + 5 int n; + 6 int L[N], R[N], a[N]; + 7 + 8 int main() { + 9 cin >> n; +10 for (int i = 1; i <= n; ++i) { +11 int x; +12 cin >> x; +13 __(1)__ ; +14 } +15 +16 for (int i = 1; i <= n; ++i) { +17 R[i] = __(2)__ ; +18 L[i] = i - 1; +19 } +20 +21 for (int i = 1; i <= n; ++i) { +22 L[__(3)__] = L[a[i]]; +23 R[L[a[i]]] = R[__(4)__]; +24 } +25 +26 for (int i = 1; i <= n; ++i) { +27 cout << __(5)__ << " "; +28 } +29 +30 cout << endl; +31 return 0; +32 } +``` + +( ) 38. (3分) (1)处应填:________________ + +( ) 39. (2分) (2)处应填:________________ + +( ) 40. (3分) (3)处应填:________________ + +( ) 41. (3分) (4)处应填:________________ + +( ) 42. (3分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第07套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第07套.md new file mode 100644 index 0000000..28f92fd --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第07套.md @@ -0,0 +1,410 @@ +
CSP-J 初赛模拟卷(第 07 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 计算机应用的最早领域( ) +A. 数值计算  B. 人工智能  C. 机器人  D. 过程控制 + +( ) 2. 二进制数11 1011 1001 0111和01 0110 1110 1011进行逻辑与运算的结果是( )。 +A. 01 0010 1000 1011  B. 01 0010 1001 0011 +C. 01 0010 1000 0001  D. 01 0010 1000 0011 + +( ) 3. 在内存储器中每个存储单元都被赋予一个唯一的序号,称为( ) +A. 地址  B. 序号  C. 下标  D. 编号 + +( ) 4. 如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照CapsLock、 字母键A、字母键 S、字母键D、字母键 F 的顺序循环按键,即 CapsLock、A、 S、D、F、CapsLock、A、S、D、F、……,屏幕上输出的第 81 个字符是字母( )。 +A. A  B. S  C. D  D. a + +( ) 5. 分辨率为 800x600、16 位色的位图,存储图像信息所需的空间为( )。 +A. 937.5KB  B. 4218.75KB  C. 4320KB  D. 2880KB + +( ) 6. 以比较作为基本运算,在N个数中找出最大数,最坏情况下所需要的最少的比较次数为( )。 +A. $N^2$  B. N  C. N-1  D. `N+1` + +( ) 7. 以下是 32 位机器和 64 位机器的区别是( )。 +A. 显示器不同  B. 硬盘大小不同  C. 寻址空间不同  D. 输入法不同 + +( ) 8. 由四个没有区别的点构成的简单无向连通图的个数是( )。 +A. 6  B. 7  C. 8  D. 9 + +( ) 9. 言泡排序算法的伪代码如下: +```text +输入:数组L,n≥k。输出:按非递减顺序排序的L。 +算法 BubbleSort: + 1. FLAG ← n //标记被交换的最后元素位置 + 2. while FLAG > 1 do + 3. k ← FLAG -1 + 4. FLAG ← 1 + 5. for j=1 to k do + 6. if L(j) > L(j+1) then do + 7. L(j) ← L(j+1) + 8. FLAG ← j +``` +对 $n$ 个数用以上音泡排序算法进行排序,最少需要比较多少次?( )。 +A. $n^2$  B. $n - 2$  C. $n - 1$  D. $n$ + +( ) 10. 表达式a\*(b+c)\*d 的后缀表达式为( ),其中“\*”和“+”是运算符。 +A. `**a+bcd`  B. `abc+*d*`  C. `abc+d**`  D. `*a*+bcd` + +( ) 11. 一棵二叉例如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1, 若某结点的下标为i,则其在孩子位于下标2i处、右孩子位于下标2i+1处),则该数组的最大下标至少为( )。 +题目图示 + +A. 6  B. 10  C. 15  D. 12 + +( ) 12. 十进制小数 13.375 对应的二进制数是( )。 +A. 1101.011  B. 1011.011  C. 1101.101  D. 1010.01 + +( ) 13. 一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9, 9颠倒过来看还是6,其他数字颠倒过来都不构成数字。 +类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901。假设某个城市的车牌只由5位数字组成,每一位都可以取0到9。 +请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?( ) +A. 60  B. 125  C. 75  D. 100 + +( ) 14. 为了统计一个非负整数的二进制形式中 1 的个数,代码如下: +int CountBit(int x) +{ +int ret = 0; +while (x) +{ +ret++; +___________; +} +return ret; +} +则空格内要填入的语句是( )。 +A. `x >>= 1`  B. `x &= x - 1`  C. `x |= x >> 1`  D. `x <<= 1` + +( ) 15. 下列说法正确的是( )。 +A. CPU的主要任务是执行数据运算和程序控制 +B. 存储器具有记忆能力,其中信息任何时候都不会丢失 +C. 两个显示器屏幕尺寸相同,则它们的分辨率必定相同 +D. 个人用户只能使用 Wifi 的方式连接到 Internet + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 39 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n; + 4 int a[100]; + 5 + 6 int main() { + 7 scanf("%d", &n); + 8 for (int i = 1; i <= n; ++i) + 9 scanf("%d", &a[i]); +10 int ans = 1; +11 for (int i = 1; i <= n; ++i) { +12 if (i > 1 && a[i] < a[i - 1]) +13 ans = i; +14 while (ans < n && a[i] >= a[ans + 1]) +15 ++ans; +16 printf("%d\n", ans); +17 } +18 return 0; +19 } +``` + +**判断题** + +( ) 16. (1分) 第16行输出ans时,ans的值一定大于i。( ) + +( ) 17. (1分) 程序输出的ans小于等于n。( ) + +( ) 18. (1.5分) 若将第12行的 $<$ 改为 $!=$ ,程序输出的结果不会改变。( ) + +( ) 19. (1.5分) 当程序执行到第16行时,若ans-i>2,则 $a[i+1]\leq a[i]$ 。( ) + +**单选题** + +( ) 20. (3分) 若输入的a数组是一个严格单调递增的数列,此程序的时间复杂度( ) +A. `O(log n)`  B. `O(n^2)`  C. `O(n log n)`  D. `O(n)` + +( ) 21. (4分) 最坏情况下,此程序的时间复杂度是( ) +A. `O(n^2)`  B. `O(log n)`  C. `O(n)`  D. `O(n log n)` + +**(2)** + +```cpp + 1 #include + 2 #include + 3 + 4 char base[64]; + 5 char table[256]; + 6 char str[256]; + 7 char ans[256]; + 8 + 9 void init() +10 { +11 for (int i = 0; i < 26; i++) base[i] = 'A' + i; +12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i; +13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i; +14 base[62] = '+', base[63] = '/'; +15 +16 for (int i = 0; i < 256; i++) table[i] = 0xff; +17 for (int i = 0; i < 64; i++) table[base[i]] = i; +18 table['='] = 0; +19 } +20 +21 void decode(char *str) +22 { +23 char *ret = ans; +24 int i, len = strlen(str); +25 for (i = 0; i < len; i += 4) { +26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4; +27 if (str[i + 2] != '=') +28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2; +29 if(str[i + 3] != '=') +30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]]; +31 } +32 } +33 +34 int main() +35 { +36 init(); +37 printf("%d\n", (int)table[0]); +38 +39 scanf("%s", str); +40 decode(str); +41 printf("%s\n", ans); +42 return 0; +43 } +``` + +假设 `char` 是 8 位有符号类型,输入字符串长度为 4 的倍数,且输入不超过数组范围。 + +**判断题** + +( ) 22. (1.5分) 输出的第二行一定是由小写字母、大写字母、数字和 `+`、`/`、`=` 构成的字符串。( ) + +( ) 23. (1.5分) 可能存在输入不同,但输出的第二行相同的情形。( ) + +( ) 24. (1.5分) 输出的第一行为 `-1`。( ) + +**单选题** + +( ) 25. (3分) 设输入字符串长度为 $n$,`decode` 函数的时间复杂度为( )。 +A. $O(\sqrt n)$  B. $O(n)$  C. $O(n\log n)$  D. $O(n^2)$ + +( ) 26. (3分) 当输入为 `Y3Nx` 时,输出的第二行为( )。 +A. `csp`  B. `csq`  C. `CSP`  D. `Csp` + +( ) 27. (3.5分) 当输入为 `Y2NmIDIwMjE=` 时,输出的第二行为( )。 +A. `ccf2021`  B. `ccf2022`  C. `ccf 2021`  D. `ccf 2022` + +**(3)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 int n, m; + 5 int f[101][101]; + 6 int F[101][101]; + 7 int main(){ + 8 scanf("%d%d",&n,&m);//n的值在1到100之间 + 9 memset(f,-1,sizeof(f)); +10 for(int i = 1; i <= m; i++) { +11 int u,v,w;//w的值在0到10000之间 +12 scanf("%d%d%d",&u,&v,&w); +13 f[u][v]=f[v][u]=w; +14 } +15 for(int k = 1; k <= n; k++) +16 for(int i=1;i <=n; i++) +17 for(int j=1;j<= n; j++) +18 if(f[i][k]!=-1&&f[k][j]!=-1) +19 if(f[i][j]==-1||f[i][j]>f[k][j]+f[i][k]) +20 f[i][j]=f[i][k]+f[k][j]; +21 int ans=2147483647; +22 for(int i=1;i<=n;i++) +23 for(int j=1;j<=n; j++){ +24 for(int x=1;x<=n; x++) +25 for(int y=1;y<=n; y++) +26 F[x][y]=f[x][y]; +27 F[i][j]=F[j][i]=0; +28 for(int x=1;x<= n; x++) +29 for(int y=1;y<=n; y++) +30 if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y]) +31 F[x][y]=F[x][i]+F[i][y]; +32 for(int x=1;x<=n; x++) +33 for(int y=1;y<=n; y++) +34 if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y]) +35 F[x][y]=F[x][j]+F[j][y]; +36 int res=0; +37 for(int x=1;x<=n; x++) +38 for(int y=1;y + 2 #include + 3 using namespace std; + 4 const int maxn = 10000000; + 5 const int maxs = 10000; + 6 + 7 int n; + 8 unsigned a[maxn], b[maxn],res[maxn], ord[maxn]; + 9 unsigned cnt[maxs + 1]; +10 int main() { +11 scanf("%d", &n); +12 for (int i = 0; i < n; ++i) +13 scanf("%u%u", &a[i], &b[i]); +14 memset(cnt, 0, sizeof(cnt)); +15 for (int i = 0; i < n; ++i) +16 __(1)__; // 利用 cnt 数组统计数量 +17 for (int i = 0; i < maxs; ++i) +18 cnt[i + 1] += cnt[i]; +19 for (int i = 0; i < n; ++i) +20 __(2)__; // 记录初步排序结果 +21 memset(cnt, 0, sizeof(cnt)); +22 for (int i = 0; i < n; ++i) +23 __(3)__; // 利用 cnt 数组统计数量 +24 for (int i = 0; i < maxs; ++i) +25 cnt[i + 1] += cnt[i]; +26 for (int i = n - 1; i >= 0; --i) +27 __(4)__; // 记录最终排序结果 +28 for (int i = 0; i < n; i++) +29 printf("%u %u\n", __(5)__); +30 +31 return 0; +32 } +``` + +( ) 34. (3分) (1)处应填 +A. `++cnt [i]`  B. `++cnt[b[i]]` +C. `++cnt[a[i] * maxs + b[i]]`  D. `++cnt[a[i]]` + +( ) 35. (3分) (2)处应填 +A. `ord[--cnt[a[i]]] = i`  B. `ord[--cnt[b[i]]] = a[i]` +C. `ord[--cnt[a[i]]] = b[i]`  D. `ord[--cnt[b[i]]] = i` + +( ) 36. (3分) (3)处应填 +A. `++cnt[b[i]]`  B. `++cnt[a[i] * maxs + b[i]]` +C. `++cnt[a[i]]`  D. `++cnt[i]` + +( ) 37. (3分) (4)处应填 +A. `res[--cnt[a[ord[i]]]] = ord[i]`  B. `res[--cnt[b[ord[i]]]] = ord[i]` +C. `res[--cnt[b[i]]] = ord[i]`  D. `res[--cnt[a[i]]] = ord[i]` + +( ) 38. (3分) (5)处应填 +A. `a[i], b[i]`  B. `a[res[i]], b[res[i]]` +C. `a[ord[res[i]]], b[ord[res[i]]]`  D. `a[res[ord[i]]], b[res[ord[i]]]` + +**(2)** + +完善程序 + +(郊游活动)有n名同学参加学校组织的郊游活动,已知学校给这n名同学的郊游总结题为A元,与此同时第i位同学自己携带了M元。为了方便郊游,活动地点提供 $B(\geq n)$ 钢游行车供人租用,租用第j辆自行车的价格为C1元,每位同学可以使用自己携带的钱或者学校的郊游经验,为了方便账务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们供图道最多有多少位同学能够租用到自行车。 + +本题采用二分法。对于区间 $[l, r]$ ,我们取中间点 mid 并判断租用到自行车的人数能否达到 mid。判断的过程是利用贪心算法实现的。 + +```cpp + 1 #include + 2 using namespace std; + 3 #define MAXN 1000000 + 4 int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid; + 5 bool check(int nn) { + 6 int count = 0, i, j; + 7 i = __(1)__; + 8 j = 1; + 9 while (i <= n) { +10 if(__(2)__) +11 count += C[j] - M[i]; +12 i++; +13 j++; +14 } +15 return __(3)__; +16 } +17 void sort(int a[], int l, int r) { +18 int i = l, j = r, x = a[(l + r) / 2], y; +19 while (i <= j) { +20 while (a[i] < x) i++; +21 while (a[j] > x) j--; +22 if (i <= j) { +23 y = a[i]; a[i] = a[j]; a[j] = y; +24 i++; j--; +25 } +26 } +27 if (i < r) sort(a, i, r); +28 if (l < j) sort(a, l, j); +29 } +30 int main() { +31 int i; +32 cin >> n >> B >> A; +33 for (i = 1; i <= n; i++) +34 cin >> M[i]; +35 for (i = 1; i <= B; i++) +36 cin >> C[i]; +37 sort(M, 1, n); +38 sort(C, 1, B); +39 l = 0; +40 r = n; +41 while (l <= r) { +42 mid = (l + r) / 2; +43 if(__(4)__){ +44 ans = mid; +45 l = mid + 1; +46 }else +47 r = __(5)__; +48 } +49 cout << ans << endl; +50 return 0; +51 } +``` + +( ) 39. (3分) (1)处应填:________________ + +( ) 40. (3分) (2)处应填:________________ + +( ) 41. (3分) (3)处应填:________________ + +( ) 42. (2.5分) (4)处应填:________________ + +( ) 43. (2.5分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第08套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第08套.md new file mode 100644 index 0000000..7c4a65a --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第08套.md @@ -0,0 +1,379 @@ +
CSP-J 初赛模拟卷(第 08 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 以下不属于无线通信技术的是( )。 +A. 蓝牙  B. Wifi  C. GPRS  D. 以太网 + +( ) 2. 在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 +A. 43  B. -85  C. -43  D. -84 + +( ) 3. 以下不是存储设备的是( )。 +A. 光盘  B. 磁盘  C. 固态硬盘  D. 鼠标 + +( ) 4. 编译器的主要功能( ) +A. 将源程序翻译成机器指令代码  B. 将源程序重新组合 +C. 将低级语言翻译成高级语言  D. 将一种高级语言翻译成另一种高级语言 + +( ) 5. 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0) +$$ +\begin{array}{l} \text {s = a ;} \\ \text {for(b = 1;b< = c;b++)} \\ \text {s = s - 1 ;} \end{array} +$$ +则与上述程序段功能等价的赋值语句是( ) +A. $s = a - c$;  B. $s = a - b$;  C. `s=s-c;`  D. `s=b-c;` + +( ) 6. 给定一个含 $N$ 个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要 $N - 1$ 次比较操作。则最坏情况下,在该数组中同时找最大与最小的数至少需要( )次比较操作。([表示向上取整,]表示向下取整) +A. $\lceil 3N / 2\rceil -2$  B. $\lfloor 3N / 2\rfloor -2$  C. $2N - 2$  D. $2N - 4$ + +( ) 7. 由1, 1, 2, 2, 3这五个数字组成不同的三位数有( )种。 +A. 18  B. 15  C. 12  D. 24 + +( ) 8. 向一个栈顶指针为 hs 的链式栈中插入一个指针s 指向的结点时,应执行( )。 +A. `hs->next = s;`  B. `s->next = hs; hs = s;` +C. `s->next = hs->next; hs->next = s;`  D. `s->next = hs; hs = hs->next;` + +( ) 9. 对于有n个顶点、m条边的无向联通图(m>n),需要删掉( )条边才能使其成为一棵树。 +A. n-1  B. m-n  C. m-n-1  D. `m-n+1` + +( ) 10. 把8个同样的球放在5个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?( ) +提示:如果8个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。 +A. 22  B. 24  C. 18  D. 20 + +( ) 11. 独根树的高度为 1,具有 61 个结点的完全二叉树的高度为( )。 +A. 5  B. 6  C. 7  D. 8 + +( ) 12. 10000 以内,与 10000 互质的正整数有( )个。 +A. 2000  B. 4000  C. 6000  D. 8000 + +( ) 13. 有以下程序: +```cpp +#include +using namespace std; +int main() +{ + int k = 4, n = 0; + while (n < k) + { + n++; + if (n % 3 != 0) + continue; + k--; + } + cout << k << "," << n << endl; + return 0; +} +``` +程序运行后输出的结果是( )。 +A. 2,2  B. 2,3  C. 3,2  D. 3,3 + +( ) 14. 操作系统的作用是( )。 + +A. 把源程序译成目标程序  B. 便于进行数据管理 +C. 控制和管理系统资源  D. 实现硬件之间的连接 + +( ) 15. Lucia 和她的朋友以及朋友的朋友都在某社交网站上注册了账号。下图是他 们之间的关系图,两个人之间有边相连代表这两个人是朋友,没有边相连代表不是朋友。这个社交网站的规则是:如果某人 A 向他(她)的朋友 B 分享了某张照片,那么 B 就可以对该照片进行评论;如果 B 评论了该照片,那 么他(她)的所有朋友都可以看见这个评论以及被评论的照片,但是不能对该照片进行评论(除非 A 也向他(她)分享了该照片)。现在 Lucia 已经上传了一张照片,但是她不想让 Jacob 看见这张照片,那么她可以向以下朋友( )分享该照片。 +题目图示 + +A. Dana, Michael, Eve  B. Dana, Eve, Monica +C. Michael, Eve, Jacob  D. Micheal, Peter, Monica + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 41 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 + 5 const double r = acos(0.5); + 6 + 7 int a1, b1, c1, d1; + 8 int a2, b2, c2, d2; + 9 +10 inline int sq(const int x) { return x * x; } +11 inline int cu(const int x) { return x * x * x; } +12 +13 int main() +14 { +15 cout.flags(ios::fixed); +16 cout.precision(4); +17 +18 cin >> a1 >> b1 >> c1 >> d1; +19 cin >> a2 >> b2 >> c2 >> d2; +20 +21 int t = sq(a1 - a2) + sq(b1 - b2) + sq(c1 - c2); +22 +23 if (t <= sq(d2 - d1)) cout << cu(min(d1, d2)) * r * 4; +24 else if (t >= sq(d2 + d1)) cout << 0; +25 else { +26 double x = d1 - (sq(d1) - sq(d2) + t) / sqrt(t) / 2; +27 double y = d2 - (sq(d2) - sq(d1) + t) / sqrt(t) / 2; +28 cout << (x * x * (3 * d1 - x) + y * y * (3 * d2 - y)) * r; +29 } +30 cout << endl; +31 return 0; +32 } +``` + +假设输入的所有数的绝对值都不超过 1000,完成下面的判断题和单选题: + +**判断题** + +( ) 16. (1.5分) 将第 21 行中 t 的类型声明从 int 改为 double,不会影响程序运行的结果。( ) + +( ) 17. (1.5分) 将第 26、27 行中的“/sqrt(t)/2”替换为“/2 /sqrt(t)”,不会影响程序运行的结果。( ) + +( ) 18. (1.5分) 将第 28 行中的“x \* x”改成“sq(x)”、“y \* y”改成“sq(y)”,不会影响程序运行的结果。( ) + +( ) 19. (1.5分) 当输入为“0 0 0 1 1 0 0 1”时,输出为“1.3090”。( ) + +**单选题** + +( ) 20. (3分) 当输入为“1 1 1 1 1 1 1 2”时,输出为( )。 +A. “3.1416”  B. “6.2832”  C. “4.7124”  D. “4.1888” + +( ) 21. (3分) 这段代码的含义为( ) +A. 求圆的面积并  B. 求球的体积并  C. 求球的体积交  D. 求椭球的体积并 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 long long n, ans; + 5 int k, len; + 6 long long d[1000000]; + 7 + 8 int main() { + 9 cin >> n >> k; +10 d[0] = 0; +11 len= 1; +12 ans = 0; +13 for (long long i = 0; i 1$,则输出 `ans` 时,`len` 一定小于 $n$。( ) + +( ) 24. (1.5分) 若 $k>1$,则输出 `ans` 时,$k^{\mathrm{len}}$ 一定大于 $n$。( ) + +**单选题** + +( ) 25. (3分) 若输入的 $n=10^{15}$,$k=1$,则输出等于( )。 +A. $1$  B. $(10^{30}-10^{15})/2$  C. $(10^{30}+10^{15})/2$  D. $10^{15}$ + +( ) 26. (3分) 若输入的 $n=205891132094649$(即 $3^{30}$),$k=3$,则输出等于( )。 +A. $3^{30}$  B. $(3^{30}-1)/2$  C. $3^{30}-1$  D. $(3^{30}+1)/2$ + +( ) 27. (3分) 若输入的 $n=100010002000090$,$k=10$,则输出等于( )。 +A. 11112222444543  B. 11122222444453 +C. 11122222444543  D. 11112222444453 + +**(3)** + +```cpp + 1 #include + 2 + 3 #define n 100000 + 4 #define N n+1 + 5 + 6 int m; + 7 int a[N], b[N], c[N], d[N]; + 8 int f[N], g[N]; + 9 +10 void init() +11 { +12 f[1] = g[1] = 1; +13 for (int i = 2; i <= n; i++) { +14 if (!a[i]) { +15 b[m++] = i; +16 c[i] = 1, f[i] = 2; +17 d[i] = 1, g[i] = i + 1; +18 } +19 for (int j = 0; j < m && b[j] * i <= n; j++) { +20 int k = b[j]; +21 a[i * k] = 1; +22 if (i % k == 0) { +23 c[i * k] = c[i] + 1; +24 f[i * k] = f[i] / c[i * k] * (c[i * k] + 1); +25 d[i * k] = d[i]; +26 g[i * k] = g[i] * k + d[i]; +27 break; +28 } +29 else { +30 c[i * k] = 1; +31 f[i * k] = 2 * f[i]; +32 d[i * k] = g[i]; +33 g[i * k] = g[i] * (k + 1); +34 } +35 } +36 } +37 } +38 +39 int main() +40 { +41 init(); +42 +43 int x; +44 scanf("%d", &x); +45 printf("%d %d\n", f[x], g[x]); +46 return 0; +47 } +``` + +假设输入的x是不超过1000的自然数,完成下面的判断题和单选题: + +**判断题** + +( ) 28. (1.5分) 若输入不为"1",把第12行删去不会影响输出的结果。( ) + +( ) 29. (2分) 第24行 $f[i*k] = f[i] / c[i*k] * (c[i*k] + 1)$ 中的“$f[i]/c[i*k]$”可能存在无法整除而向下取整的情况。( ) + +( ) 30. (2分) 在执行完init()后,f数组不是单调递增的,但g数组是单调递增的。( ) + +**单选题** + +( ) 31. (3分) init函数的时间复杂度为( )。 +A. $O(n)$  B. `O(nlogn)`  C. `O(n√n)`  D. `O(n²)` + +( ) 32. (3分) 在执行完init()后,f[1], f[2], f[3].....f[100]中有( )个等于2。 +A. 23  B. 24  C. 25  D. 26 + +( ) 33. (4分) 当输入"1000"时,输出为( )。 +A. "15 1340"  B. "15 2340"  C. "16 2340"  D. "16 1340" + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 29 分,各小题分值见题目)** + +**(1)** + +对于一个1到 $n$ 的排列 $P$ (即1到 $n$ 中每一个数在 $P$ 中出现了恰好一次),令 $q[i]$ 为第 $i$ 个位置之后第一个比 $P[i]$ 值更大的位置,如果不存在这样的位置,则$q[i] = n + 1$ 。举例来说,如果 $n = 5$ 且 $P$ 为15423,则 $q$ 为26656。 + +下列程序读入了排列 $P$ ,使用双向链表求解了答案。试补全程序。 + +```cpp + 1 #include + 2 using namespace std; + 3 const int N = 100010; + 4 int n; + 5 int L[N], R[N], a[N]; + 6 int main() { + 7 cin >> n; + 8 for (int i = 1; i <= n; ++i) { + 9 int x; +10 cin >> x; +11 __(1)__ ; +12 } +13 for (int i = 1; i <= n; ++i) { +14 R[i] = __(2)__ ; +15 L[i] = i - 1; +16 } +17 for (int i = 1; i <= n; ++i) { +18 L[__(3)__] = L[a[i]]; +19 R[L[a[i]]] = R[__(4)__]; +20 } +21 for (int i = 1; i <= n; ++i) { +22 cout << __(5)__ << " "; +23 } +24 cout << endl; +25 return 0; +26 } +``` + +( ) 34. (3分) (1)处应填:________________ + +( ) 35. (2分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +( ) 38. (3分) (5)处应填:________________ + +**(2)** + +2(烧作业)某课作业布置了N(3sNs10000)个题目,第题对应的得分是a。作业的总得分的计算方式为去掉作业中得分最小的一个题,剩下其它所有题目得分的平均值。但很不幸小A遇到了一场火灾,前K(1+K+N-2)个题目被烧了,无法记录得分。小A想知道,K是多少时,可以得到最高的作业得分?作业被烧了前K页,这时的得分是从第K+1页到最后一页中,去除最小得分后取平均值。 + +输入第一行是整数N,第二行是n个不超过10000的非负整数表示a + +输出一行,若干个整数表示答案。如果有多个K,请依次升序输出。 + +```cpp + 1 #include + 2 #include + 3 #define min(a,b)(a=2;i--) { +16 minScore=min(minScore,s[i]); +17 __(2)__; +18 nowAverage=__(3)__; +19 if(nowAverage> maxAverage){ +20 __(4)__ +21 maxAverage=nowAverage; +22 } else if(fabs(nowAverage-maxAverage)<1e-6) +23 __(5)__; +24 } +25 for(int i=cnt; i >= 1; i--) +26 printf("%d\n",k[i]); +27 return 0; +28 } +``` + +( ) 39. (3分) (1)处应填 +A. `sum=n`  B. `sum=s[1]`  C. `sum=s[n]`  D. `sum=0` + +( ) 40. (3分) (2)处应填 +A. `sum=maxAverage*(n-i)`  B. `sum+=s[i]` +C. `sum+=s[n-i]`  D. `sum=s[i]+minScore` + +( ) 41. (3分) (3)处应填 +A. `(double)(sum+minScore)/(n-i)`  B. `sum*1.0/(n-i)` +C. `(int)(sum-minScore)/(n-i)`  D. `(double)(sum-minScore)/(n-i)` + +( ) 42. (3分) (4)处应填 +A. `k[++cnt]=i;`  B. `k[cnt++]=i-1` +C. `cnt=1;k[cnt]=i-1;`  D. `cnt=0;k[cnt]=l;` + +( ) 43. (3分) (5)处应填 +A. `k[cnt++]=i;`  B. `k[++cnt]=i-1;`  C. `k[cnt++]=n-i;`  D. `k[cnt]=i;` diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第09套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第09套.md new file mode 100644 index 0000000..5c735ec --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第09套.md @@ -0,0 +1,313 @@ +
CSP-J 初赛模拟卷(第 09 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 以下不属于面向对象程序设计语言的是( )。 +A. `C++`  B. Python  C. Java  D. C + +( ) 2. 在内存储器中每个存储单元都被赋予一个唯一的序号,称为( ) +A. 地址  B. 序号  C. 下标  D. 编号 + +( ) 3. 广域网的英文缩写是( )。 +A. LAN  B. WAN  C. MAN  D. LNA + +( ) 4. 现有一张分辨率为 2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?( )。 +A. 16MB  B. 4MB  C. 8MB  D. 2MB + +( ) 5. 对于入栈顺序为 $a, b, c, d, e$ 的序列,下列( )不是合法的出栈序列。 +A. a, b, c, d, e  B. e, d, c, b, a +C. b, a, c, d, e  D. c, d, a, e, b + +( ) 6. 设有100个已排好序的数据元素,采用折半查找时,最大比较次数为( )。 +A. 7  B. 10  C. 6  D. 8 + +( ) 7. 有 10 个顶点的无向图至少应该有( )条边才有可能构成连通图。 +A. 9  B. 10  C. 11  D. 12 + +( ) 8. 10 个三好学生名额分配到 7 个班级,每个班级至少有一个名额,一共有( )种不同的分配方案。 +A. 84  B. 72  C. 56  D. 504 + +( ) 9. 独根树的高度为 1,具有 61 个结点的完全二叉树的高度为( )。 +A. 5  B. 6  C. 7  D. 8 + +( ) 10. 把8个同样的球放在5个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的分法?( ) +提示:如果8个球都放在一个袋子里,无论是哪个袋子,都只算同一种分法。 +A. 22  B. 24  C. 18  D. 20 + +( ) 11. 在数据压缩编码中的哈夫曼编码方法,在本质是一种( )的策略。 +A. 枚举  B. 贪心  C. 递归  D. 动态规划 + +( ) 12. 考虑如下递归算法,则调用solve(7)得到的返回结果为( )。 +```cpp +1 solve(n) +2 if n<=1 return 1 +3 else if n>=5 return n*solve(n-2) +4 else return n*solve(n-1) +``` +题目图示 + +A. 105  B. 840  C. 210  D. 420 + +( ) 13. 以a为起点,对右边的无向图进行深度优先遍历,则b,c,d,e四个点中有可能作为最后一个遍历到的点个数为( )。 +A. 1  B. 2  C. 3  D. 4 + +( ) 14. 有四个人要从A点坐一条船过河到B点,船一开始在A点。该船一次最多可坐两个人。已知这四个人中每个人独自坐船的过河时间分别为1, 2, 4, 8, 且两个人坐船的过河时间为两人独自过河时间的较大者。则最短( )时间可以让四个人都过河到B点(包括从B点把船开回A点时间)。 +A. 14  B. 15  C. 16  D. 17 + +( ) 15. 319和377的最大公约数是( )。 +A. 27  B. 33  C. 29  D. 31 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 39.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 char st[100001]; + 5 int main() { + 6 scanf("%s", st); + 7 int n = strlen(st); + 8 for (int i = 1; i <= n; ++i) { + 9 if (n % i == 0) { +10 char c = st[i - 1]; +11 if (c >= 'a') +12 st[i - 1] = c - 'a' + 'A'; +13 } +14 } +15 printf("%s", st); +16 return 0; +17 } +``` + +**判断题** + +( ) 16. (1.5分) 输入的字符串只能由小写字母或大写字母组成。( ) + +( ) 17. (1.5分) 若将第8行的“i=1”改为“i=0”,程序运行时会发生错误。( ) + +( ) 18. (1.5分) 若将第8行的“ $i <= n$ ”改为“ $i * i <= n$ ”,程序运行结果不会改变。( ) + +( ) 19. (1.5分) 若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。( ) + +**单选题** + +( ) 20. (3分) 若输入的字符串长度为18,那么输入的字符串跟输出的字符串相比,至多有( )个字符不同。 +A. 18  B. 6  C. 10  D. 1 + +( ) 21. (3分) 若输入的字符串长度为( ),那么输入的字符串跟输出的字符串相比,至多有36个字符不同。 +A. 36  B. 100000  C. 1  D. 128 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n; + 4 int a[100]; + 5 + 6 int main() { + 7 scanf("%d", &n); + 8 for (int i = 1; i <= n; ++i) + 9 scanf("%d", &a[i]); +10 int ans = 1; +11 for (int i = 1; i <= n; ++i) { +12 if (i > 1 && a[i] < a[i - 1]) +13 ans = i; +14 while (ans < n && a[i] >= a[ans + 1]) +15 ++ans; +16 printf("%d\n", ans); +17 } +18 return 0; +19 } +``` + +**判断题** + +( ) 22. (1分) 第16行输出ans时,ans的值一定大于i。( ) + +( ) 23. (1分) 程序输出的ans小于等于n。( ) + +( ) 24. (1.5分) 若将第12行的 $<$ 改为 `!=` ,程序输出的结果不会改变。( ) + +( ) 25. (1.5分) 当程序执行到第16行时,若 $\text{ans - i} > 2$,则 $\mathrm{a}[i + 1] \leq \mathrm{a}[i]$。( ) + +**单选题** + +( ) 26. (3分) 若输入的a数组是一个严格单调递增的数列, 此程序的时间复杂度 ( ) +A. `O(log n)`  B. `O(n^2)`  C. `O(n log n)`  D. `O(n)` + +( ) 27. (4分) 最坏情况下, 此程序的时间复杂度是 ( ) +A. `O(n^2)`  B. `O(log n)`  C. `O(n)`  D. `O(n log n)` + +**(3)** + +```cpp + 1 #include + 2 + 3 #define n 100000 + 4 #define N n+1 + 5 + 6 int m; + 7 int a[N], b[N], c[N], d[N]; + 8 int f[N], g[N]; + 9 +10 void init() +11 { +12 f[1] = g[1] = 1; +13 for (int i = 2; i <= n; i++) { +14 if (!a[i]) { +15 b[m++] = i; +16 c[i] = 1, f[i] = 2; +17 d[i] = 1, g[i] = i + 1; +18 } +19 for (int j = 0; j < m && b[j] * i <= n; j++) { +20 int k = b[j]; +21 a[i * k] = 1; +22 if (i % k == 0) { +23 c[i * k] = c[i] + 1; +24 f[i * k] = f[i] / c[i * k] * (c[i * k] + 1); +25 d[i * k] = d[i]; +26 g[i * k] = g[i] * k + d[i]; +27 break; +28 } +29 else { +30 c[i * k] = 1; +31 f[i * k] = 2 * f[i]; +32 d[i * k] = g[i]; +33 g[i * k] = g[i] * (k + 1); +34 } +35 } +36 } +37 } +38 +39 int main() +40 { +41 init(); +42 +43 int x; +44 scanf("%d", &x); +45 printf("%d %d\n", f[x], g[x]); +46 return 0; +47 } +``` + +假设输入的x是不超过1000的自然数,完成下面的判断题和单选题: + +**判断题** + +( ) 28. (1.5分) 若输入不为“1”,把第12行删去不会影响输出的结果。( ) + +( ) 29. (2分) 第24行 $f[i*k] = f[i] / c[i*k] * (c[i*k] + 1)$ 中的“$f[i]/c[i*k]$”可能存在无法整除而向下取整的情况。( ) + +( ) 30. (2分) 在执行完init()后,做组不是单调递增的,但g数组是单调递增的。( ) + +**单选题** + +( ) 31. (3分) init函数的时间复杂度为( )。 +A. `O(n)`  B. `O(nlogn)`  C. `O(n√n)`  D. `O(n²)` + +( ) 32. (3分) 在执行完init()后,f[1], f[2], f[3].....f[100]中有( )个等于2。 +A. 23  B. 24  C. 25  D. 26 + +( ) 33. (4分) 当输入"1000"时,输出为( )。 +A. "15 1340"  B. "15 2340"  C. "16 2340"  D. "16 1340" + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 29 分,各小题分值见题目)** + +**(1)** + +完善程序: + +(快速幂)请完善下面的程序,该程序使用分治法求 $x^{p} \mod m$ 的值。 + +输入:三个不超过 10000 的正整数 x, p, m。 + +输出: $x^{p} \mod m$ 的值。 + +提示:若 $p$ 为偶数,$x^{p} = (x^{2})^{p / 2}$;若 $p$ 为奇数,$x^{p} = x * (x^{2})^{(p - 1) / 2}$。 + +```cpp + 1 #include + 2 using namespace std; + 3 int x, p, m, i, result; + 4 int main(){ + 5 cin >> x >> p >> m; + 6 result = __(1)__; + 7 while (__(2)__){ + 8 if (p % 2 == 1) + 9 result = __(3)__; +10 p /= 2; +11 x = __(4)__; +12 } +13 cout << __(5)__ << endl; +14 return 0; +15 } +``` + +( ) 34. (2分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +( ) 38. (3分) (5)处应填:________________ + +**(2)** + +(Josephus 问题)有 n个人围成一个圈,依次标号 0 至 n-1。从 0 号开始,依次 0, 1, 0, 1, ... 交替报数,报到 1 的人会离开,直至圈中只剩下一个人。求最后剩下人的编号。 +试补全模拟程序。 + +```cpp + 1 #include + 2 + 3 const int MAXN = 1000000; + 4 int F[MAXN]; + 5 + 6 int main(){ + 7 int n; + 8 scanf("%d", &n); + 9 int i = 0, p = 0, c = 0; +10 while( __(1)__){ +11 if (F[i] == 0){ +12 if ( __(2)__ ){ +13 F[i] = 1; +14 __(3)__; +15 } +16 __(4)__; +17 } +18 __(5)__; +19 } +20 int ans = -1; +21 for (int i = 0; i < n; i++) +22 if (F[i] == 0) +23 ans = i; +24 printf("%d\n", ans); +25 return 0; +26 } +``` + +( ) 39. (3分) (1)处应填 +A. `i < n`  B. `c < n`  C. `i < n - 1`  D. `c < n - 1` + +( ) 40. (3分) (2)处应填 +A. `i % 2 == 0`  B. `i % 2 == 1`  C. p  D. !p + +( ) 41. (3分) (3)处应填 +A. `i++`  B. `i = (i+1) % n`  C. `c++`  D. p ^= 1 + +( ) 42. (3分) (4)处应填 +A. `i++`  B. `i = (i+1) % n`  C. `c++`  D. p ^= 1 + +( ) 43. (3分) (5)处应填 +A. `i++`  B. `i = (i+1) % n`  C. `c++`  D. p ^= 1 diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第10套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第10套.md new file mode 100644 index 0000000..f91678b --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第10套.md @@ -0,0 +1,368 @@ +
CSP-J 初赛模拟卷(第 10 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。 +A. 1983  B. 1984  C. 1985  D. 1986 + +( ) 2. 目前主流的计算机储存数据最终都是转换成( )数据进行储存。 +A. 二进制  B. 十进制  C. 八进制  D. 十六进制 + +( ) 3. 以下奖项与计算机领域最相关的是( )。 +A. 奥斯卡奖  B. 图灵奖  C. 诺贝尔奖  D. 普利策奖 + +( ) 4. 下列四个不同进制的数中,与其它三项数值上不相等的是 +A. `(269)16`  B. `(617)10`  C. `(1151)8`  D. `(1001101011)2` + +( ) 5. 链表不具有的特点是( )。 +A. 可随机访问任一元素  B. 不必事先估计存储空间 +C. 插入删除不需要移动元素  D. 所需空间与线性表长度成正比 + +( ) 6. 下面的故事与( )算法有着异曲同工之妙。 +从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座 +山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事……’” +A. 枚举  B. 递归  C. 贪心  D. 分治 + +( ) 7. 对于有n个顶点、m条边的无向联通图(m > n),需要删掉( )条边才能使其成为一棵树。 +A. n - 1  B. m - n  C. m - n - 1  D. `m - n + 1` + +( ) 8. 5 个小朋友并排站成一列,其中有两个小朋友是双胞胎,如果要求这两个双胞胎必须相邻,则有( )种不同排列方法? +A. 48  B. 36  C. 24  D. 72 + +( ) 9. 如果一棵二叉树只有根结点,那么这棵二叉树高度为1。请问高度为5的完全二叉树有( )种不同形态? +A. 16  B. 15  C. 17  D. 32 + +( ) 10. 有五副不同颜色的手套(共 10 只手套,每副手套左右手各 1 只),一次性从中取 6 只手套,请问恰好能配成两副手套的不同取法有( )种。 +A. 120  B. 180  C. 150  D. 30 + +( ) 11. —副纸牌除掉大小王有52张牌,四种花色,每种花色13张。假设从这52张牌中随机抽取13张纸牌,则至少( )张牌的花色一致。 +A. 4  B. 2  C. 3  D. 5 + +( ) 12. 设 $A$ 是一个实数的数组,考虑下面的递归算法: +```text +XYZ (A[1..n]) +if n= 1 then return A[1] +else temp ← XYZ (A[1..n-1]) + if temp < A[n] + then return temp + else return A[n] +``` +请问算法XYZ的输出是什么?( )。 +A. A数组的平均  B. A数组的最小值  C. A数组的中值  D. A数组的最大值 + +( ) 13. 假设一棵二叉树的后序遍历序列为DGJHEBIFCA,中序遍历序列为DBGEHJACIF,则其前序遍历序列为( )。 +A. ABCDEFGHIJ  B. ABDEGHJCFI  C. ABDEGJHCFI  D. ABDEGHJFIC + +( ) 14. 一些数字可以颠倒过来看,例如0、1、8颠倒过来还是本身,6颠倒过来是9, 9颠倒过来看还是6,其他数字颠倒过来都不构成数字。 +类似的,一些多位数也可以颠倒过来看,比如106颠倒过来是901。假设某个城市的车牌只由5位数字组成,每一位都可以取0到9。 +请问这个城市最多有多少个车牌倒过来恰好还是原来的车牌?( ) +A. 60  B. 125  C. 75  D. 100 + +( ) 15. 一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i,则其左孩子位于下标2i处、右孩子位于下标 $2i+1$ 处),则该数组的最大下标至少为( )。 +题目图示 + +A. 6  B. 10  C. 15  D. 12 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 36 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 + 5 char encoder[26] = {'C','S','P',0}; + 6 char decoder[26]; + 7 + 8 string st; + 9 +10 int main() { +11 int k = 0; +12 for (int i = 0; i < 26; ++i) +13 if (encoder[i] != 0) ++k; +14 for (char x ='A'; x <= 'Z'; ++x) { +15 bool flag = true; +16 for (int i = 0; i < 26; ++i) +17 if (encoder[i] ==x) { +18 flag = false; +19 break; +20 } +21 if (flag) { +22 encoder[k]= x; +23 ++k; +24 } +25 } +26 for (int i = 0; i < 26; ++i) +27 decoder[encoder[i]- 'A'] = i + 'A'; +28 cin >> st; +29 for (int i = 0; i < st.length( ); ++i) +30 st[i] = decoder[st[i] -'A']; +31 cout << st; +32 return 0; +33 } +``` + +**判断题** + +( ) 16. (1.5分) 输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( ) + +( ) 17. (1.5分) 若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。( ) + +( ) 18. (1.5分) 将第 12 行的 `i < 26` 改为 `i < 16`,程序运行结果不会改变。( ) + +( ) 19. (1.5分) 将第 26 行的 `i < 26` 改为 `i < 16`,程序运行结果不会改变。( ) + +**单选题** + +( ) 20. (3分) 若输出的字符串为 `ABCABCABCA`,则下列说法正确的是( )。 +A. 输入的字符串中既有 S 又有 P  B. 输入的字符串中既有 S 又有 B +C. 输入的字符串中既有 A 又有 P  D. 输入的字符串中既有 A 又有 B + +( ) 21. (3分) 若输出的字符串为 `CSPCSPCSPCSP`,则下列说法正确的是( )。 +A. 输入的字符串中既有 P 又有 A  B. 输入的字符串中既有 S 又有 R +C. 输入的字符串中既有 A 又有 S  D. 输入的字符串中既无 S 又无 A + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 int n; + 5 int d[1000]; + 6 + 7 int main() { + 8 cin >> n; + 9 for (int i = 0; i < n; ++i) +10 cin >> d[i]; +11 int ans = -1; +12 for (int i = 0; i < n; ++i) +13 for (int j = 0; j < n; ++j) +14 if (d[i] < d[j]) +15 ans = max(ans, d[i] + d[j] - (d[i] & d[j])); +16 cout << ans; +17 return 0; +18 } +``` + +假设输入的n和d[i]都是不超过10000的正整数,完成下面的判断题和单选题: + +**判断题** + +( ) 22. (1.5分) n必须小于1000,否则程序可能会发生运行错误。( ) + +( ) 23. (1.5分) 输出一定大于等于0。( ) + +( ) 24. (1.5分) 若将第13行的“j = 0”改为“j = i + 1”,程序输出可能会改变。( ) + +( ) 25. (1.5分) 将第14行的“d[i] < d[j]”改为“d[i] != d[j]”,程序输出不会改变。( ) + +**单选题** + +( ) 26. (3分) 若输入n为100,且输出为127,则输入的d[i]中不可能有( )。 +A. 127  B. 126  C. 128  D. 125 + +( ) 27. (3分) 若输出的数大于0,则下面说法正确的是( )。 +A. 若输出为偶数,则输入的d[i]中最多有两个偶数 +B. 若输出为奇数,则输入的d[i]中至少有两个奇数 +C. 若输出为偶数,则输入的d[i]中至少有两个偶数 +D. 若输出为奇数,则输入的d[i]中最多有两个奇数 + +**(3)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n,m,i,j,p,k; + 4 int a[100],b[100]; + 5 int main() + 6 { + 7 cin>>n>>m; + 8 a[0]=n;i=0;p=0;k=1; + 9 do{ +10 for(j=0;j + 2 using namespace std; + 3 #define MAXN 1000000 + 4 int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid; + 5 bool check(int nn) { + 6 int count = 0, i, j; + 7 i = __(1)__; + 8 j = 1; + 9 while (i <= n) { +10 if(__(2)__) +11 count += C[j] - M[i]; +12 i++; +13 j++; +14 } +15 return __(3)__; +16 } +17 void sort(int a[], int l, int r) { +18 int i = l, j = r, x = a[(l + r) / 2], y; +19 while (i <= j) { +20 while (a[i] < x) i++; +21 while (a[j] > x) j--; +22 if (i <= j) { +23 y = a[i]; a[i] = a[j]; a[j] = y; +24 i++; j--; +25 } +26 } +27 if (i < r) sort(a, i, r); +28 if (l < j) sort(a, l, j); +29 } +30 int main() { +31 int i; +32 cin >> n >> B >> A; +33 for (i = 1; i <= n; i++) +34 cin >> M[i]; +35 for (i = 1; i <= B; i++) +36 cin >> C[i]; +37 sort(M, 1, n); +38 sort(C, 1, B); +39 l = 0; +40 r = n; +41 while (l <= r) { +42 mid = (l + r) / 2; +43 if(__(4)__){ +44 ans = mid; +45 l = mid + 1; +46 }else +47 r = __(5)__; +48 } +49 cout << ans << endl; +50 return 0; +51 } +``` + +( ) 34. (3分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (2.5分) (4)处应填:________________ + +( ) 38. (2.5分) (5)处应填:________________ + +**(2)** + +(马走日)回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试其他路径。回溯法是一种选优搜索法按选向前乘以达到目标。但当搜索到某一步时,若发现原先选择并优或达不到目标,则返回一步重新选择,这种是不通就返回去再现的技术称为回溯法,而满足回溯条件的某个状态的点称为回溯点。 + +马在中国棋棋中以日字形规则移动。请编写一段程序,给定n×大小的棋盘以及马的初始位置(m,n),要求不能重复盘上的同一个点计算马有多少途迹还可以逾历盘上的所有点。 + +```cpp + 1 #include + 2 using namespace std; + 3 int r,c; + 4 int cnt,tot; + 5 int wayr[8]={2,2,1,-1,-2,-2,1,-1}; + 6 int wayc[8]={1,-1,2,2,1,-1,-2,-2}; + 7 bool mark[1001][1001]; + 8 bool check(int x, int y) + 9 { +10 if(__(1)__) return true; +11 return false; +12 } +13 void search(int x,int y) +14 { +15 for(int i=0;i<8;i++) +16 if(__(2)__ && __(3)__) +17 { +18 mark[x+wayr[i]][y+wayc[i]]=true; +19 tot++; +20 if(__(4)__) cnt++; +21 search(__(5)__); +22 tot--; +23 mark[x+wayr[i]][y+wayc[i]]=false; +24 } +25 } +26 int main() +27 { +28 cnt=0; +29 int m,n; +30 cin>>r>>c>>m>>n; +31 if(!check(m,n)) cout<<0<=0 || y>=0 || x=0 && y>=0 && x=0&&y>=0 || xCSP-J 初赛模拟卷(第 11 套) +
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 1TB代表的字节数是( )。 +A. 2的10次方  B. 2的20次方  C. 2的30次方  D. 2的40次方 + +( ) 2. 在 PC 机中,PENTIUM(奔腾)、酷睿、赛扬等是指( )。 +A. 生产厂家名称  B. 硬盘的型号  C. CPU 的型号  D. 显示器的型号 + +( ) 3. 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。 +A. 1983  B. 1984  C. 1985  D. 1986 + +( ) 4. ( )不属于操作系统。 +A. Windows  B. DOS  C. Photoshop  D. NOI Linux + +( ) 5. FTP 可以用于( )。 +A. 远程传输文件  B. 发送电子邮件  C. 浏览网页  D. 网上聊天 + +( ) 6. 以下不属于无线通信技术的是( )。 +A. 蓝牙  B. Wifi  C. GPRS  D. 以太网 + +( ) 7. 以下哪个奖项是计算机科学领域的最高奖?( ) +A. 图灵奖  B. 鲁班奖  C. 诺贝尔奖  D. 普利策奖 + +( ) 8. 二进制数101.11对应的十进制数是( )。 +A. 6.5  B. 5.5  C. 5.75  D. 5.25 + +( ) 9. 10 个三好学生名额分配到 7 个班级,每个班级至少有一个名额,一共有( )种不同的分配方案。 +A. 84  B. 72  C. 56  D. 504 + +( ) 10. 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。 +A. 296  B. 133  C. 256  D. 199 + +( ) 11. 甲、乙、丙三位同学选修课程,从 4 门课程中,甲选修 2 门,乙、丙各选修3门,则不同的选修方案共有( )种。 +A. 36  B. 48  C. 96  D. 192 + +( ) 12. 关于拓扑排序,下面说法正确的是( )。 +A. 所有连通的有向图都可以实现拓扑排序 +B. 对同一个图而言,拓扑排序的结果是唯一的 +C. 拓扑排序中入度为0的结点总会排在入度大于0的结点的前面 +D. 拓扑排序结果序列中的第一个结点一定是入度为0的点 + +( ) 13. 仿生学的问世开辟了独特的科学技术发展道路。人们研究生物体的结构、功能和工作原理,并将这些原理移植于新兴的工程技术中。以下关于仿生学的叙述,错误的是( )。 +A. 由研究蝙蝠,发明雷达  B. 由研究蜘蛛网,发明因特网 +C. 由研究海豚,发明声呐  D. 由研究电鱼,发明伏特电池 + +( ) 14. 甲乙丙丁四人在考虑周末要不要外出郊游。 +已知①如果周末下雨,并且乙不去,则甲一定不去;②如果乙去,则丁一定去;③如果丙去,则丁一定不去;④如果丁不去,而且甲不去,则丙一定不去。 +如果周末丙去了,则甲________,乙________,丁________,周末________。 + +(1)甲: +A. 去了;  B. 没去。 +(2)乙: +A. 去了;  B. 没去。 +(3)丁: +A. 去了;  B. 没去。 +(4)周末: +A. 下雨;  B. 没下雨。 + +( ) 15. ( )是一种选优搜索法,按选优条件向前搜索,以达到目标。当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。 +A. 回溯法  B. 枚举法  C. 动态规划  D. 贪心 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 35.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 + 3 int n; + 4 int a[1000]; + 5 + 6 int f(int x) + 7 { + 8 int ret = 0; + 9 for (; x; x &= x - 1) ret++; +10 return ret; +11 } +12 +13 int g(int x) +14 { +15 return x & -x; +16 } +17 +18 int main() +19 { +20 scanf("%d", &n); +21 for (int i = 0; i < n; i++) scanf("%d", &a[i]); +22 for (int i = 0; i < n; i++) +23 printf("%d ", f(a[i]) + g(a[i])); +24 printf("\n"); +25 return 0; +26 } +27 +``` + +**判断题** + +( ) 16. (1.5分) 输入的 $n$ 等于1001时,程序不会发生下标越界。( ) + +( ) 17. (1.5分) 输入的 $a[i]$ 必须全为正整数,否则程序将陷入死循环。( ) + +( ) 18. (1.5分) 当输入为“5 2 11 9 16 10”时,输出为“3 4 3 17 5”。( ) + +( ) 19. (1.5分) 当输入为"1 511998"时,输出为"18"。( ) + +( ) 20. (1.5分) 将源代码中 $g$ 函数的定义(13-16行)移到main函数的后面,程序可以正常编译运行。( ) + +**单选题** + +( ) 21. (3分) 当输入为"2 -65536 2147483647"时,输出为( ) +A. "65532 33"  B. "65552 32"  C. "65535 34"  D. "65554 33" + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n, m; + 4 int a[100], b[100]; + 5 + 6 int main() { + 7 scanf("%d%d", &n, &m); + 8 for (int i = 1; i <= n; ++i) + 9 a[i] = b[i] = 0; +10 for (int i = 1; i <= m; ++i) { +11 int x, y; +12 scanf("%d%d", &x, &y); +13 if (a[x] < y && b[y] < x) { +14 if (a[x] > 0) +15 b[a[x]] = 0; +16 if (b[y] > 0) +17 a[b[y]] = 0; +18 a[x] = y; +19 b[y] = x; +20 } +21 } +22 int ans = 0; +23 for (int i = 1; i <= n; ++i) { +24 if (a[i] == 0) +25 ++ans; +26 if (b[i] == 0) +27 ++ans; +28 } +29 printf("%d", ans); +30 return 0; +31 } +``` + +假设输入的 $n$ 和 $m$ 都是正整数,$x$ 和 $y$ 都是在 $[1, n]$ 的范围内的整数,完成下面的判断题和单选题: + +**判断题** + +( ) 22. (1.5分) 当 $m > 0$ 时,输出的值一定小于 $2n$。( ) + +( ) 23. (1.5分) 执行完第27行的“+ + ans”时,ans一定是偶数。( ) + +( ) 24. (1.5分) $a[i]$ 和 $b[i]$ 不可能同时大于0。( ) + +( ) 25. (1.5分) 右程序执行到第13行时, $x$ 总是小于 $y$ ,那么第15行不会被执行。( ) + +**单选题** + +( ) 26. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 两两不同,则输出的值为( ) +A. $2n - 2m$  B. $2n + 2$  C. $2n - 2$  D. $2n$ + +( ) 27. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 都相等,则输出的值为( ) +A. $2n - 2$  B. $2n$  C. $2m$  D. $2n - 2m$ + +**(3)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 int n, m; + 5 int f[101][101]; + 6 int F[101][101]; + 7 int main(){ + 8 scanf("%d%d",&n,&m);//n的值在1到100之间 + 9 memset(f,-1,sizeof(f)); +10 for(int i = 1; i <= m; i++) { +11 int u,v,w;//w的值在0到10000之间 +12 scanf("%d%d%d",&u,&v,&w); +13 f[u][v]=f[v][u]=w; +14 } +15 for(int k = 1; k <= n; k++) +16 for(int i=1;i <=n; i++) +17 for(int j=1;j<= n; j++) +18 if(f[i][k]!=-1&&f[k][j]!=-1) +19 if(f[i][j]==-1||f[i][j]>f[k][j]+f[i][k]) +20 f[i][j]=f[i][k]+f[k][j]; +21 int ans=2147483647; +22 for(int i=1;i<=n;i++) +23 for(int j=1;j<=n; j++){ +24 for(int x=1;x<=n; x++) +25 for(int y=1;y<=n; y++) +26 F[x][y]=f[x][y]; +27 F[i][j]=F[j][i]=0; +28 for(int x=1;x<= n; x++) +29 for(int y=1;y<=n; y++) +30 if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y]) +31 F[x][y]=F[x][i]+F[i][y]; +32 for(int x=1;x<=n; x++) +33 for(int y=1;y<=n; y++) +34 if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y]) +35 F[x][y]=F[x][j]+F[j][y]; +36 int res=0; +37 for(int x=1;x<=n; x++) +38 for(int y=1;y + 2 using namespace std; + 3 const int MAXN = 1000; + 4 int n, i, lbound, rbound, mid, m, count; + 5 int x[MAXN]; + 6 int main() + 7 { + 8 cin >> n >> m; + 9 for (i = 0; i < n; i++) +10 cin >> x[i]; +11 lbound = 0; +12 rbound = m; +13 while (__(1)__) +14 { +15 mid = lbound + (rbound - lbound) / 2; +16 __(2)__; +17 for (i = 0; i < n; i++) +18 if (__(3)__) +19 __(4)__; +20 if (count > n / 2) +21 lbound = mid + 1; +22 else +23 __(5)__; +24 cout << mid << " " << lbound << " " << rbound << " " << count << endl; +25 } +26 cout << rbound << endl; +27 return (0); +28 } +``` + +( ) 34. (3分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +( ) 38. (2分) (5)处应填:________________ + +**(2)** + +完善程序: + +(二又查找树)二又查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。试判断一棵树是否为二叉查找树。输入的第一个行包含一个整数 $n$,表示这棵树有 $n$ 个顶点,编号分别为 $1,2,\dots ,n$,其中编号为1的为根结点。之后的第1行有三个数value, left_child, right_child,分别表示该节点关键字的值、左子节点的编号、右子节点的编号;如果不存在左子节点或右子节点,则用0代替。输出1表示这棵树是二叉查找树,输出0则表示不是。 + +```cpp + 1 #include + 2 using namespace std; + 3 const int SIZE = 100; + 4 const int INFINITE = 1000000; + 5 struct node + 6 { + 7 int left_child, right_child, value; + 8 }; node a[SIZE]; + 9 int is_bst( int root, int lower_bound, int upper_bound ) +10 { +11 int cur; +12 if ( root == 0 ) +13 return(1); +14 cur = a[root].value; +15 if ( (cur > lower_bound) && ( __(1)__ ) && (is_bst( a[root].left_child, lower_bound, cur ) == 1) && (is_bst( __(2)__, __(3)__, __(4)__ ) == 1) ) +16 return(1); +17 return(0); +18 } +19 int main() +20 { +21 int i, n; cin >> n; +22 for ( i = 1; i <= n; i++ ) +23 cin >> a[i].value >> a[i].left_child >> a[i].right_child; +24 cout << is_bst( __(5)__, -INFINITE, INFINITE ) << endl; +25 return(0); +26 } +``` + +( ) 39. (3分) (1)处应填:________________ + +( ) 40. (3分) (2)处应填:________________ + +( ) 41. (3分) (3)处应填:________________ + +( ) 42. (3分) (4)处应填:________________ + +( ) 43. (2分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第12套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第12套.md new file mode 100644 index 0000000..11245d3 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第12套.md @@ -0,0 +1,365 @@ +
CSP-J 初赛模拟卷(第 12 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 14 题,每题 2 分,共计 28 分)** + +( ) 1. 操作系统的作用是( )。 +A. 把源程序译成目标程序  B. 便于进行数据管理 +C. 控制和管理系统资源  D. 实现硬件之间的连接 + +( ) 2. NOI 的中文意思是( )。 +A. 中国信息学联赛  B. 全国青少年信息学奥林匹克竞赛 +C. 中国青少年信息学奥林匹克竞赛  D. 中国计算机协会 + +( ) 3. ( )是一种先进先出的线性表。 +A. 栈  B. 队列  C. 哈希表(散列表)  D. 二叉树 + +( ) 4. 如果256 种颜色用二进制编码来表示,至少需要( )位。 +A. 6  B. 7  C. 8  D. 9 + +( ) 5. 设 $x = true, y = true, z = false$,以下逻辑运算表达式值为真的是( )。 +A. $(y \vee z) \wedge x \wedge z$  B. $x \wedge (z \vee y) \wedge z$  C. $(x \wedge y) \wedge z$  D. $(x \wedge y) \vee (z \vee x)$ + +( ) 6. 下列四个不同进制的数中,与其它三项数值上不相等的是 +A. $(269)_{16}$  B. $(617)_{10}$  C. $(1151)_{8}$  D. $(1001101011)_{2}$ + +( ) 7. 表达式 $a^*(b + c)^* d$ 的后缀表达式为( ),其中“\*”和“+”是运算符。 +A. `**a+bcd`  B. `abc+*d*`  C. `abc+d**`  D. `*a*+bcd` + +( ) 8. —副纸牌除掉大小王有52张牌,四种花色,每种花色13张。假设从这52张牌中随机抽取13张纸牌,则至少( )张牌的花色一致。 +A. 4  B. 2  C. 3  D. 5 + +( ) 9. 前序遍历序列与中序遍历序列相同的二叉树为( )。 +A. 根结点无左子树 +B. 根结点无右子树 +C. 只有根结点的二叉树或非叶子结点只有左子树的二叉树 +D. 只有根结点的二叉树或非叶子结点只有右子树的二叉树 + +( ) 10. 一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为 $i$ ,则其左孩子位于下标2i处、右孩子位于下标 $(2i + 1)$ 处),则图中所有结点的最大下标为( )。 +题目图示 + +A. 6  B. 10  C. 12  D. 15 + +( ) 11. 原字符串中任意一段连续的字符所组成的新字符串称为子串。 +则字符 “AAABBBCCC” 共有( )个不同的非空子串。 +A. 3  B. 12  C. 36  D. 45 + +( ) 12. 现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。若待合并结点权值相同,优先选取由其他结点合并形成的结点。那么,“也”字的编码长度可能是( )。 +A. 1  B. 2  C. 3  D. 4 + +( ) 13. 设 G 是有 n 个结点、m 条边 ( $n \leq m$ ) 的连通图,必须删去 G 的( )条边,才能使得 G 变成一棵树。 +A. $m - n + 1$  B. m - n  C. $m + n + 1$  D. $n - m + 1$ + +( ) 14. 双向链表中有两个指针域llink和rlink,分别指向该结点的前驱及后继。设p指向链表中的一个结点,它的左右结点均非空。现要求删除结点p,则下面语句序列中错误的是( )。 +A. `p->rlink->llink = p->rlink;` p->llink->rlink = p->llink; delete p; +B. `p->llink->rlink = p->rlink;` p->rlink->llink = p->llink; delete p; +C. `p->rlink->llink = p->llink;` p->rlink->llink->rlink = p->rlink; delete p; +D. `p->llink->rlink = p->rlink;` p->llink->rlink->llink = p->llink; delete p; + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 36 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 int main() + 4 { + 5 const int SIZE=10; + 6 int height[SIZE],num[SIZE],n,ans; + 7 cin>>n; + 8 for(int i=0;i>height[i]; +10 num[i]=1; +11 for(int j=0;j=num[i])) +13 num[i]=num[j]+1; +14 } +15 } +16 ans=0; +17 for(int i=0;ians) ans=num[i]; +19 } +20 cout<=num[i]"改为"num[j]>num[i]", 程序的输出结果不会改变。( ) + +( ) 18. (1.5分) 将18行"num[i]>ans"改为"num[i]>=ans", 程序的输出结果不会改变。( ) + +**单选题** + +( ) 19. (3分) 若输入的数据为 +10 +1 1 1 1 1 1 1 1 1 1 +则程序的输出结果是( )。 +A. 4  B. 3  C. 2  D. 1 + +( ) 20. (3分) 若输入的数据为 +10 +3 2 5 11 12 7 4 10 15 6 +因程序的输出结果是( )。 +A. 4  B. 5  C. 6  D. 7 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 int n; + 5 int d[1000]; + 6 + 7 int main() { + 8 cin >> n; + 9 for (int i = 0; i < n; ++i) +10 cin >> d[i]; +11 int ans = -1; +12 for (int i = 0; i < n; ++i) +13 for (int j = 0; j < n; ++j) +14 if (d[i] < d[j]) +15 ans = max(ans, d[i] + d[j] - (d[i] & d[j])); +16 cout << ans; +17 return 0; +18 } +``` + +假设输入的n和d[i]都是不超过10000的正整数,完成下面的判断题和单选题: + +**判断题** + +( ) 21. (1.5分) n必须小于1000,否则程序可能会发生运行错误。( ) + +( ) 22. (1.5分) 输出一定大于等于0。( ) + +( ) 23. (1.5分) 若将第13行的“j = 0”改为“j = i + 1”,程序输出可能会改变。( ) + +( ) 24. (1.5分) 将第14行的“d[i] < d[j]”改为“d[i] != d[j]”,程序输出不会改变。( ) + +**单选题** + +( ) 25. (3分) 若输入n为100,且输出为127,则输入的d[i]中不可能有( )。 +A. 127  B. 126  C. 128  D. 125 + +( ) 26. (3分) 若输出的数大于0,则下面说法正确的是( )。 +A. 若输出为偶数,则输入的d[i]中最多有两个偶数 +B. 若输出为奇数,则输入的d[i]中至少有两个奇数 +C. 若输出为偶数,则输入的d[i]中至少有两个偶数 +D. 若输出为奇数,则输入的d[i]中最多有两个奇数 + +**(3)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n, m; + 4 int a[100], b[100]; + 5 + 6 int main() { + 7 scanf("%d%d", &n, &m); + 8 for (int i = 1; i <= n; ++i) + 9 a[i] = b[i] = 0; +10 for (int i = 1; i <= m; ++i) { +11 int x, y; +12 scanf("%d%d", &x, &y); +13 if (a[x] < y && b[y] < x) { +14 if (a[x] > 0) +15 b[a[x]] = 0; +16 if (b[y] > 0) +17 a[b[y]] = 0; +18 a[x] = y; +19 b[y] = x; +20 } +21 } +22 int ans = 0; +23 for (int i = 1; i <= n; ++i) { +24 if (a[i] == 0) +25 ++ans; +26 if (b[i] == 0) +27 ++ans; +28 } +29 printf("%d", ans); +30 return 0; +31 } +``` + +假设输入的 $n$ 和 $m$ 都是正整数,$x$ 和 $y$ 都是在 $[1, n]$ 的范围内的整数,完成下面的判断题和单选题:· 判断题 + +**判断题** + +( ) 27. (1.5分) 当m>0时,输出的值一定小于2n。( ) + +( ) 28. (1.5分) 执行完第27行的“++ans”时,ans一定是偶数。( ) + +( ) 29. (1.5分) $a[i]$ 和 $b[i]$ 不可能同时大于0。( ) + +( ) 30. (1.5分) 若每次执行到第13行时都有 x < y,则第15行不会被执行。( ) + +**单选题** + +( ) 31. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 两两不同,则输出的值为( ) +A. $2n - 2m$  B. $2n + 2$  C. $2n - 2$  D. $2n$ + +( ) 32. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 都相等,则输出的值为( ) +A. $2n - 2$  B. $2n$  C. $2m$  D. $2n - 2m$ + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 15 小题,共计 43 分,各小题分值见题目)** + +**(1)** + +(质因数分解)给出正整数 $n$ ,请输入将 $n$ 质因数分解的结果,结果从小到大输出。例如:输入 $n = 120$ ,程序应该输出22235,表示: $120 = 2\times 2$ $2\times 3\times 5$ ,输入保证 $2\leq n\leq 10^{0}$ 。提示:先从小到大枚举变量 $\bar{i}$ ,然后用 $\bar{i}$ 不停试除 $n$ 来寻找所有的质因子。试补全程序。 + +```cpp + 1 #include + 2 using namespace std; + 3 int n, i; + 4 + 5 int main() { + 6 scanf("%d", &n); + 7 for(i = __(1)__; __(2)__ <=n; i ++){ + 8 __(3)__{ + 9 printf("%d ", i); +10 n = n / i; +11 } +12 } +13 if(__(4)__) +14 printf("%d ", __(5)__); +15 return 0; +16 } +``` + +( ) 33. (3分) (1)处应填 +A. 1  B. n-1  C. 2  D. 0 + +( ) 34. (3分) (2)处应填 +A. `n/i`  B. `n/(i*i)`  C. `i*i`  D. `i*i*i` + +( ) 35. (3分) (3)处应填 +A. `if(n%i==0)`  B. `if(i*i<=n)`  C. `while(n%i==0)`  D. `while(i*i<=n)` + +( ) 36. (3分) (4)处应填 +A. `n>1`  B. `n<=1`  C. `i + 2 using namespace std; + 3 const int N = 110000, P = 10007; + 4 int n; + 5 int a[N], len; + 6 int ans; + 7 void getDivisor() { + 8 len = 0; + 9 for (int i = 1; __(1)__ <= n; ++i) +10 if (n % i == 0) { +11 a[++len] = i; +12 if ( __(2)__ != i) a[++len] = n / i; +13 } +14 } +15 int gcd(int a, int b) { +16 if (b == 0) { +17 __(3)__ ; +18 } +19 return gcd(b, __(4)__ ); +20 } +21 int main() { +22 cin >> n; +23 getDivisor(); +24 ans = 0; +25 for (int i = 1; i <= len; ++i) { +26 for (int j = i + 1; j <= len; ++j) { +27 ans = ( __(5)__ ) % P; +28 } +29 } +30 cout << ans << endl; +31 return 0; +32 } +``` + +( ) 38. (2分) (1)处应填:________________ + +( ) 39. (3分) (2)处应填:________________ + +( ) 40. (3分) (3)处应填:________________ + +( ) 41. (3分) (4)处应填:________________ + +( ) 42. (3分) (5)处应填:________________ + +**(3)** + +完善程序: + +(切割绳子)有 $n$ 条绳子,每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割,但不可以连接。现在要从这些绳子中切割出 $m$ 条长度相同的绳段,求绳段的最大长度是多少。 + +输入:第一行是一个不超过100的正整数 $n$,第二行是 $n$ 个不超过 $10^{6}$ 的正整数,表示每条绳子的长度,第三行是一个不超过 $10^{8}$ 的正整数 $m$。输出:绳段的最大长度,若无法切割,输出Failed。 + +```cpp + 1 #include + 2 using namespace std; + 3 int n, m, i, lbound, ubound, mid, count; + 4 int len[100]; // 绳子长度 + 5 int main() + 6 { + 7 cin >> n; + 8 count = 0; + 9 for (i = 0; i < n; i++) +10 { +11 cin >> len[i]; +12 __(1)__; +13 } +14 cin >> m; +15 if (__(2)__) +16 { +17 cout << "Failed" << endl; +18 return 0; +19 } +20 lbound = 1; +21 ubound = 1000000; +22 while (__(3)__) +23 { +24 mid = __(4)__; +25 count = 0; +26 for (i = 0; i < n; i++) +27 __(5)__; +28 if (count < m) +29 ubound = mid - 1; +30 else +31 lbound = mid; +32 } +33 cout << lbound << endl; +34 return 0; +35 } +``` + +( ) 43. (2.5分) (1)处应填:________________ + +( ) 44. (2.5分) (2)处应填:________________ + +( ) 45. (3分) (3)处应填:________________ + +( ) 46. (3分) (4)处应填:________________ + +( ) 47. (3分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第13套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第13套.md new file mode 100644 index 0000000..c3fe34f --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第13套.md @@ -0,0 +1,345 @@ +
CSP-J 初赛模拟卷(第 13 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。目前,指纹识别、虹膜识别、人脸识别等技术已广泛应用于政府、银行、安全防卫等领域。以下不属于生物特征识别技术及其应用的是( )。 +A. 指静脉验证  B. 步态验证  C. ATM机密码验证  D. 声音验证 + +( ) 2. 一个正整数在二进制下有100位,则它在十六进制下有( )位。 +A. 7  B. 13  C. 25  D. 不能确定 + +( ) 3. 以下哪个是面向对象的高级语言( )。 +A. 汇编语言  B. `C++`  C. Fortran  D. Basic + +( ) 4. Wi-Fi 主要用于构建哪类无线网络?( ) +A. 无线广域网  B. 无线城域网  C. 无线局域网  D. 无线路由器 + +( ) 5. 以下逻辑表达式的值恒为真的是( )。 +A. $P \vee (\neg P \land Q) \vee (\neg P \land \neg Q)$  B. $Q \vee (\neg P \land Q) \vee (P \land \neg Q)$ +C. $P \vee Q \vee (P \land \neg Q) \vee (\neg P \land Q)$  D. $P \vee \neg Q \vee (P \land \neg Q) \vee (\neg P \land \neg Q)$ + +( ) 6. 把 64 位非零浮点数强制转换成32 位浮点数后,不可能( )。 +A. 大于原数  B. 小于原数  C. 等于原数  D. 与原数符号相反 + +( ) 7. 前缀表达式 `+ 3 * 2 + 5 12`的值是( )。 +A. 23  B. 25  C. 37  D. 65 + +( ) 8. 计算机界的最高奖是( )。 +A. 菲尔兹奖  B. 诺贝尔奖  C. 图灵奖  D. 普利策奖 + +( ) 9. 甲、乙、丙三位同学选修课程,从 4 门课程中,甲选修 2 门,乙、丙各选修3门,则不同的选修方案共有( )种。 +A. 36  B. 48  C. 96  D. 192 + +( ) 10. 如果一棵二叉树的中序遍历是 BAC,那么它的先序遍历不可能是( )。 +A. ABC  B. CBA  C. ACB  D. BAC + +( ) 11. 将(2,6,10,17)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数 $h(x) = (\quad)$,将不会产生冲突,其中 $a \mod b$ 表示 $a$ 除以 $b$ 的余数。 +A. $x \mod 11$  B. $x^2 \mod 11$ +C. $(2x) \mod 11$  D. $\lfloor sqrt(x) \rfloor \mod 11$,其中 $\lfloor sqrt(x) \rfloor$ 表示 $\sqrt{x}$ 下取整 + +( ) 12. 向一个栈顶指针为 `hs` 的链式栈中插入一个指针 *s* 指向的结点时,应执行( )。 +A. `hs->next = s;`  B. `s->next = hs; hs = s;` +C. `s->next = hs->next; hs->next = s;`  D. `s->next = hs; hs = hs->next;` + +( ) 13. 使用冒泡排序对序列进行升序排列,每执行一次交换操作系统将会减少 1 个逆序对,因此序列 5,4,3,2,1 需要执行( )次操作,才能完成冒泡排序。 +A. 0  B. 5  C. 10  D. 15 + +( ) 14. 设 $A$ 和 $B$ 是两个长为 $n$ 的有序数组,现在需要将 $A$ 和 $B$ 合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做( )次比较。 +A. $n^2$  B. nlogn  C. 2n  D. 2n - 1 + +( ) 15. 以 $A_0$ 作为起点,对下面的无向图进行深度优先遍历时,遍历顺序不可能是( )。 +题目图示 + +A. $A_0,A_1,A_2,A_3$  B. $A_0,A_1,A_3,A_2$  C. $A_0,A_2,A_1,A_3$  D. $A_0,A_3,A_1,A_2$ + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 37 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 char st[100001]; + 5 int main() { + 6 scanf("%s", st); + 7 int n = strlen(st); + 8 for (int i = 1; i <= n; ++i) { + 9 if (n % i == 0) { +10 char c = st[i - 1]; +11 if (c >= 'a') +12 st[i - 1] = c - 'a' + 'A'; +13 } +14 } +15 printf("%s", st); +16 return 0; +17 } +``` + +**判断题** + +( ) 16. (1.5分) 输入的字符串只能由小写字母或大写字母组成。( ) + +( ) 17. (1.5分) 若将第 8 行的 `i = 1` 改为 `i = 0`,程序运行时会发生错误。( ) + +( ) 18. (1.5分) 若将第 8 行的 `i <= n` 改为 `i * i <= n`,程序运行结果不会改变。( ) + +( ) 19. (1.5分) 若输入的字符串全部由大写字母组成,那么输出的字符串就跟输入的字符串一样。( ) + +**单选题** + +( ) 20. (3分) 若输入的字符串长度为 18,那么输入的字符串跟输出的字符串相比,至多有( )个字符不同。 +A. 18  B. 6  C. 10  D. 1 + +( ) 21. (3分) 若输入的字符串长度为( ),那么输入的字符串跟输出的字符串相比,至多有 36 个字符不同。 +A. 36  B. 100000  C. 1  D. 128 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n,m,i,j,p,k; + 4 int a[100],b[100]; + 5 int main() + 6 { + 7 cin>>n>>m; + 8 a[0]=n;i=0;p=0;k=1; + 9 do{ +10 for(j=0;j + 2 #include + 3 using namespace std; + 4 + 5 int n; + 6 int d[10000]; + 7 + 8 int find(int L, int R, int k) { if (L == R) return d[L]; + 9 int x = rand() % (R - L + 1) + L; +10 swap(d[L], d[x]); +11 int a = L + 1, b = R; +12 while (a < b) { +13 while (a < b && d[a] < d[L]) +14 ++a; +15 while (a < b && d[b] >= d[L]) +16 --b; +17 swap(d[a], d[b]); +18 } +19 if (d[a] < d[L]) +20 ++a; +21 if (a - L == k) +22 return d[L]; +23 if (a - L < k) +24 return find(a, R, k - (a - L)); +25 return find(L + 1, a - 1, k); +26 } +27 +28 int main() { +29 int k; +30 cin >> n; +31 cin >> k; +32 for (int i = 0; i < n; ++i) +33 cin >> d[i]; +34 cout << find(0, n - 1, k); +35 return 0; +36 } +``` + +假设 $1\le k\le n\le10000$,输入数组元素为不超过 10000 的正整数,且 `rand()` 产生均匀随机数。复杂度选项均指渐进数量级。 + +**判断题** + +( ) 28. (1.5分) 第 9 行中 `x` 的数值范围为 $[L+1,R]$。( ) + +( ) 29. (1.5分) 将第 19 行中的 `d[a]` 改为 `d[b]`,程序不会发生运行错误。( ) + +**单选题** + +( ) 30. (2.5分) 当输入数组严格单调递增时,此程序的平均时间复杂度为( )。 +A. $O(n\log n)$  B. $O(n)$  C. $O(\log n)$  D. $O(n^2)$ + +( ) 31. (2.5分) 当输入数组严格单调递减时,此程序的平均时间复杂度为( )。 +A. $O(n^2)$  B. $O(n)$  C. $O(n\log n)$  D. $O(\log n)$ + +( ) 32. (2.5分) 当输入数组严格单调递增时,此程序①平均时间复杂度与②最坏时间复杂度分别为( )。 +A. $O(n)$,$O(n^2)$  B. $O(n)$,$O(n\log n)$ +C. $O(n\log n)$,$O(n^2)$  D. $O(n\log n)$,$O(n\log n)$ + +( ) 33. (2.5分) 若所有数组元素相等,且 $k=n$,此程序的时间复杂度为( )。 +A. $O(n)$  B. $O(\log n)$  C. $O(n\log n)$  D. $O(n^2)$ + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 28 分,各小题分值见题目)** + +**(1)** + +```cpp +1 const int SIZE = 100; +2 int a[SIZE], n; +``` + +它记录着一个长度为n的序列 $a[1], a[2], \cdots, a[n]$ 。 +现在需要一个函数,以整数 $p(1 \leq p \leq n)$ 为参数,实现如下功能:将序列a的前p个数与后n-p个数对调,且不改变这p个数(或n-p个数)之间的相对位置。例如,长度为5的序列1,2,3,4,5,当p=2时重排结果为3,4,5,1,2。 +有一种朴素的算法可以实现这一需求,其时间复杂度为 $O(n)$ 、空间复杂度为 $O(n)$ : +```cpp + 1 void swap1( int p ) + 2 { + 3 int i, j, b[SIZE]; + 4 for ( i = 1; i <= p; i++ ) + 5 b[__(1)__] = a[i]; + 6 for ( i = p + 1; i <= n; i++ ) + 7 b[i - p] = __(2)__; + 8 for ( i = 1; i <= __(3)__; i++ ) + 9 a[i] = b[i]; +10 } +``` +我们也可以用时间换空间,使用时间复杂度为 $O(n^{2})$ 、空间复杂度为 $O(1)$ 的算法: +```cpp + 1 void swap2(int p) + 2 { + 3 int i, j, temp; + 4 for ( i = p + 1; i <= n; i++ ) + 5 { + 6 temp = a[i]; + 7 for ( j = i; j >= __(4)__; j-- ) + 8 a[j] = a[j - 1]; + 9 __(5)__ = temp; +10 } +11 } +``` + +( ) 34. (3分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (2分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +( ) 38. (3分) (5)处应填:________________ + +**(2)** + +(交朋友)根据社会学研究表明,人们都喜欢找和自己身高相近的人做朋友。现在有n名身高两两不相同的同学依次走入教室,调查人员想预测每个人在走入教室的瞬间最想和已经进入教室的哪个人做朋友。当有两名同学和这名同学的身高差一样时,这名同学会更想和高的那个人做朋友。比如一名身高为1.80米的同学进入教室时,有一名身高为1.79米的同学和一名身高为1.81米的同学在教室里,那么这名身高为1.80米的同学会更想和身高为1.81米的同学做朋友。对于第一个走入教室的同学我们不做预测。由于我们知道所有人的身高和走进教室的次序,所以我们可以采用离线的做法来解决这样的问题,我们用排序加链表的方式帮助每一个人找到在他之前进入教室的并且和他身高最相近的人。(第一空2分,其余3分) + +```cpp + 1 #include + 2 using namespace std; + 3 #define MAXN 200000 + 4 #define infinity 2147483647 + 5 int answer[MAXN], height[MAXN], previous[MAXN], next_pos[MAXN]; + 6 int order[MAXN]; + 7 int n; + 8 void sort(int l, int r) + 9 { +10 int x = height[order[(l + r) / 2]], i = l, j = r, temp; +11 while (i <= j) +12 { +13 while (height[order[i]] < x) +14 i++; +15 while (height[order[j]] > x) +16 j--; +17 if (__(1)__) +18 { +19 temp = order[i]; +20 order[i] = order[j]; +21 order[j] = temp; +22 i++; +23 j--; +24 } +25 } +26 if (i < r) +27 sort(i, r); +28 if (l < j) +29 sort(l, j); +30 } +31 int main() +32 { +33 cin >> n; +34 int i, higher, shorter; +35 for (i = 1; i <= n; i++) +36 { +37 cin >> height[i]; +38 order[i] = i; +39 } +40 sort(1, n); +41 for (i = 1; i <= n; i++) +42 { +43 previous[order[i]] = order[i - 1]; +44 __(2)__; +45 } +46 for (i = n; i >= 2; i--) +47 { +48 higher = shorter = infinity; +49 if (previous[i] != 0) +50 shorter = height[i] - height[previous[i]]; +51 if (next_pos[i] != 0) +52 __(3)__; +53 if (__(4)__) +54 answer[i] = previous[i]; +55 else +56 answer[i] = next_pos[i]; +57 next_pos[previous[i]] = next_pos[i]; +58 __(5)__; +59 } +60 for (i = 2; i <= n; i++) +61 cout << i << ":" << answer[i]; +62 return 0; +63 } +``` + +( ) 39. (2.8分) (1)处应填:________________ + +( ) 40. (2.8分) (2)处应填:________________ + +( ) 41. (2.8分) (3)处应填:________________ + +( ) 42. (2.8分) (4)处应填:________________ + +( ) 43. (2.8分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第14套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第14套.md new file mode 100644 index 0000000..77a31fe --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第14套.md @@ -0,0 +1,390 @@ +
CSP-J 初赛模拟卷(第 14 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 一个 32 位整型变量占用( )个字节。 +A. 4  B. 8  C. 32  D. 128 + +( ) 2. 二进制数 00100100 和 00010101 的和是( )。 +A. 00101000  B. 001010100  C. 01000101  D. 00111001 + +( ) 3. 关于汇编语言,下列说法错误的是( )。 +A. 是一种与具体硬件相关的程序设计语言 +B. 在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试 +C. `可以直接访问寄存器、内存单元、以及I/O端口` +D. 随着高级语言的诞生,如今已完全被淘汰,不再使用 + +( ) 4. FTP 可以用于( )。 +A. 远程传输文件  B. 发送电子邮件  C. 浏览网页  D. 网上聊天 + +( ) 5. 原字符串中任意一段连续的字符所组成的新字符串称为子串。 +则字符 “AAABBBCCC” 共有( )个不同的非空子串。 +A. 3  B. 12  C. 36  D. 45 + +( ) 6. 设变量x为非负float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是( )。 +A. `x = (x * 100) + 0.5 / 100.0;`  B. `x = (x * 100 + 0.5) / 100.0;` +C. `x = (int)(x * 100 + 0.5)/100.0;`  D. `x = (x / 100 + 0.5) * 100.0;` + +( ) 7. 一个字长为8位的整数的补码是11111001,则它的原码是( )。 +A. 00000111  B. 01111001  C. 11111001  D. 10000111 + +( ) 8. 下面是根据欧几里得算法编写的函数,它所计算的是a和b的( )。 +int euclid(int a, int b) +{ +if (b == 0) +return a; +else +return euclid(b, a % b); +} +A. 最大公共质因子  B. 最小公共质因子  C. 最大公约数  D. 最小公倍数 + +( ) 9. 有7个一模一样的苹果,放到3个一样的盘子中,盘子可以为空,一共有( )种放法。 +A. 7  B. 8  C. 21  D. $3^7$ + +( ) 10. 如果树根算第1层,那么一棵 $n$ 层的二叉树最多有( )个结点。 +A. $2^{n} - 1$  B. $2^{n}$  C. $2^{n} + 1$  D. $2^{n + 1}$ + +( ) 11. 无向完全图是图中每对顶点之间都恰好有一条边的简单图。已知无向完全图G有7个顶点,则它共有( )条边。 +A. 7  B. 21  C. 42  D. 49 + +( ) 12. 如果根的高度为 1,具有 61 个结点的完全二叉树的高度为( )。 +A. 5  B. 6  C. 7  D. 8 + +( ) 13. 对于给定的序列 $\{a_k\}$,我们把 $(i,j)$ 称为逆序对当且仅当 $i < j$ 且 $a_i > a_j$。那么序列 $\{1,7,2,3,5,4\}$ 的逆序对数为( )个。 +A. 4  B. 5  C. 6  D. 7 + +( ) 14. 给定含有 n 个互不相同元素的单峰数组 L,满足先严格递增、后严格递减,峰顶位于数组内部。用下面的二分算法寻找峰顶,请将 a、b、c 三行代码依次填入空白处。正确的填空顺序是( )。 + +```text +a. return Search(k + 1, r) +b. return Search(l, k - 1) +c. return L[k] + +Search(l, r): + if l == r then return L[l] + k = floor((l + r) / 2) + if L[k] > L[k - 1] and L[k] > L[k + 1]: ______ + else if L[k] < L[k + 1]: ______ + else: ______ + +调用 Search(2, n - 1) +``` + +A. c,a,b  B. c,b,a  C. a,b,c  D. b,a,c + +( ) 15. 广度优先搜索时,需要用到的数据结构是( )。 +A. 链表  B. 队列  C. 栈  D. 散列表 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 37 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 #define MAXN 20 + 4 int gu[MAXN][MAXN]; + 5 int luo(int n, int m) { + 6 if(n <= 1 || m < 2) + 7 return 1; + 8 if(gu[n][m] != -1) + 9 return gu[n][m]; +10 int ans=0; +11 for(int i = 0; i > n >> m; +19 for(int i = 0; i < MAXN; i++) +20 for(int j = 0; j < MAXN; j++) +21 gu[i][j]= -1; +22 cout << luo(n, m); +23 return 0; +24 } +``` + +**判断题** + +( ) 16. (1分) luo函数中,m的值不可能是奇数。( ) + +( ) 17. (1分) 若将第11行的" <"改为" <=",程序的输出结果可能会改变。( ) + +( ) 18. (2分) 若将第8、9、13行删除,程序的运行的结果不变。( ) + +( ) 19. (2分) 在添加合适的头文件后,将第19到21行替换为“memset(gu, 255,sizeof(gu));”可以起到相同的作用。( ) + +**单选题** + +( ) 20. (4分) 若输入数据为4 8,则输出为( )。 +A. 7  B. 8  C. 15  D. 16 + +( ) 21. (3分) 最坏情况下,此程序的时间复杂度是( )。 +A. `O(m²n)`  B. `O(nm!)`  C. `O(n²)`  D. `O(n²m)` + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 long long n, ans; + 5 int k, len; + 6 long long d[1000000]; + 7 + 8 int main() { + 9 cin >> n >> k; +10 d[0] = 0; +11 len= 1; +12 ans = 0; +13 for (long long i = 0; i 1,则输出 ans 时,len 一定小于 n。( ) + +( ) 24. (1.5分) 若 k > 1,则输出 ans 时, $k^{len}$ 一定大于 n。( ) + +**单选题** + +( ) 25. (1.5分) 若输入的 $n$ 等于:$10^{15}$,输入的 $k$ 为1,则输出等于( )。 +A. 1  B. $(10^{30}-10^{15})/2$  C. $(10^{30}+10^{15})/2$  D. $10^{15}$ + +( ) 26. (3分) 若输入的 $n$ 等于205,891,132,094,649(即 $3^{30}$),输入的 $k$ 为3,则输出等于( )。 +A. $3^{30}$  B. $(3^{30}-1)/2$  C. $3^{30}-1$  D. $(3^{30}+1)/2$ + +( ) 27. (3分) 若输入的 $n$ 等于100,010,002,000,090,输入的 $k$ 为10,则输出等于( )。 +A. 11,112,222,444,543  B. 11,122,222,444,453 +C. 11,122,222,444,543  D. 11,112,222,444,453 + +**(3)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n, m; + 4 int a[100], b[100]; + 5 + 6 int main() { + 7 scanf("%d%d", &n, &m); + 8 for (int i = 1; i <= n; ++i) + 9 a[i] = b[i] = 0; +10 for (int i = 1; i <= m; ++i) { +11 int x, y; +12 scanf("%d%d", &x, &y); +13 if (a[x] < y && b[y] < x) { +14 if (a[x] > 0) +15 b[a[x]] = 0; +16 if (b[y] > 0) +17 a[b[y]] = 0; +18 a[x] = y; +19 b[y] = x; +20 } +21 } +22 int ans = 0; +23 for (int i = 1; i <= n; ++i) { +24 if (a[i] == 0) +25 ++ans; +26 if (b[i] == 0) +27 ++ans; +28 } +29 printf("%d", ans); +30 return 0; +31 } +``` + +假设输入的 $n$ 和 $m$ 都是正整数,$x$ 和 $y$ 都是在 $[1, n]$ 的范围内的整数,完成下面的判断题和单选题: + +**判断题** + +( ) 28. (1.5分) 当 m > 0 时,输出的值一定小于 2n。( ) + +( ) 29. (1.5分) 执行完第27行的"++ans"时,ans一定是偶数。( ) + +( ) 30. (1.5分) $a[i]$ 和 $b[i]$ 不可能同时大于0。( ) + +( ) 31. (1.5分) 右程序执行到第13行时,x总是小于y,那么第15行不会被执行。( ) + +**单选题** + +( ) 32. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 两两不同,则输出的值为( ) +A. 2n - 2m  B. `2n + 2`  C. 2n - 2  D. 2n + +( ) 33. (3分) 若 $m$ 个 $x$ 两两不同,且 $m$ 个 $y$ 都相等,则输出的值为( ) +A. 2n - 2  B. 2n  C. 2m  D. 2n - 2m + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 29 分,各小题分值见题目)** + +**(1)** + +完善程序: + +(打印日历)输入月份 $m(1 \leq m \leq 12)$,按一定格式打印2015年第 $m$ 月的月历。例如,2015年1月的月历打印效果如下(第一列为周日): + +| S | M | T | W | T | F | S | +| --- | --- | --- | --- | --- | --- | --- | +| | | | | 1 | 2 | 3 | +| 4 | 5 | 6 | 7 | 8 | 9 | 10 | +| 11 | 12 | 13 | 14 | 15 | 16 | 17 | +| 18 | 19 | 20 | 21 | 22 | 23 | 24 | +| 25 | 26 | 27 | 28 | 29 | 30 | 31 | + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 const int dayNum[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + 5 int m, offset, i; + 6 int main() + 7 { + 8 cin >> m; + 9 cout << "S\tM\tT\tW\tT\tF\tS" << endl; /* '\t'为 TAB 制表符 */ +10 __(1)__; +11 for (i = 1; i < m; i++) +12 offset = __(2)__; +13 for (i = 0; i < offset; i++) +14 cout << '\t'; +15 for (i = 1; i <= __(3)__; i++) +16 { +17 cout << __(4)__; +18 if (i == dayNum[m] || __(5)__ == 0) +19 cout << endl; +20 else +21 cout << '\t'; +22 } +23 return (0); +24 } +``` + +( ) 34. (3分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (2.5分) (3)处应填:________________ + +( ) 37. (2.5分) (4)处应填:________________ + +( ) 38. (3分) (5)处应填:________________ + +**(2)** + +(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为: +数字 0 变成矩阵 + +0 0 + +0 1 + +数字 1 变成矩阵 + +1 1 + +1 0 + +最初该矩阵只有一个元素 0,变幻n 次后,矩阵会变成什么样? +例如,矩阵最初为:[0]; +矩阵变幻 1 次后: + +0 0 + +0 1 + +矩阵变幻 2 次后: + +0 0 0 0 + +0 1 0 1 + +0 0 1 1 + +0 1 1 0 + +输入一行一个不超过 10 的正整数 n。输出变幻 n 次后的矩阵。 + +试补全程序。 + +提示: + +<< 表示二进制左移运算符,例如(11) $_{2}$ << 2 = (1100) $_{2}$ ; + +而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0,反之为 1。 + +```cpp + 1 #include + 2 using namespace std; + 3 int n; + 4 const int max_size = 1 << 10; + 5 + 6 int res[max_size][max_size]; + 7 + 8 void recursive(int x, int y, int n, int t) { + 9 if (n == 0) { +10 res[x][y] = __(1)__; +11 return; +12 } +13 int step = 1 << (n - 1); +14 recursive(__(2)__, n - 1, t); +15 recursive(x, y + step, n - 1, t); +16 recursive(x + step, y, n - 1, t); +17 recursive(__(3)__, n - 1, !t); +18 } +19 +20 int main() { +21 scanf("%d", &n); +22 recursive(0, 0, __(4)__); +23 int size = __(5)__; +24 for (int i = 0; i < size; i++) { +25 for (int j = 0; j < size; j++) +26 printf("%d", res[i][j]); +27 puts(""); +28 } +29 return 0; +30 } +``` + +( ) 39. (3分) (1)处应填 +A. `n%2`  B. 0  C. t  D. 1 + +( ) 40. (3分) (2)处应填 +A. x-step,y-step  B. x,y-step  C. x-step,y  D. x, y + +( ) 41. (3分) (3)处应填 +A. x-step,y-step  B. $x +$ step, $y +$ step  C. x-step,y  D. x,y-step + +( ) 42. (3分) (4)处应填 +A. `n-1,n%2`  B. `n, 0`  C. `n, n%2`  D. `n-1, 0` + +( ) 43. (3分) (5)处应填 +A. $1 < < (n + 1)$  B. `1<CSP-J 初赛模拟卷(第 15 套) +
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 以下奖项与计算机领域最相关的是( )。 +A. 奥斯卡奖  B. 图灵奖  C. 诺贝尔奖  D. 普利策奖 + +( ) 2. 计算机应用的最早领域( ) +A. 数值计算  B. 人工智能  C. 机器人  D. 过程控制 + +( ) 3. 如果树根算第1层,那么一棵 $n$ 层的二叉树最多有( )个结点。 +A. $2^{n} - 1$  B. $2^{n}$  C. $2^{n} + 1$  D. $2^{n + 1}$ + +( ) 4. 对一个有向图而言,如果每个节点都存在到达其他任何节点的路径,那么就称它是强连通图。例如,下图就是一个强连通图。事实上,在删除边( )后,它依然是强连通图。 +题目图示 + +A. a  B. b  C. c  D. d + +( ) 5. 有以下程序: +```cpp +#include +using namespace std; +int main() +{ + int s, a, n; + s= 0; + a= 1; + cin >> n; + do + { + s+= 1; + a-= 2; + } + while ( a != n ); + cout << s << endl; + return(0); +} +``` +若要使程序的输出值为2,则应该从键盘给*n*输入的值是( )。 +A. -1  B. -3  C. -5  D. 0 + +( ) 6. 对于给定的序列 $\{a_k\}$,我们把 $(i,j)$ 称为逆序对当且仅当 $i < j$ 且 $a_i > a_j$。那么序列 $\{1,7,2,3,5,4\}$ 的逆序对数为( )个。 +A. 4  B. 5  C. 6  D. 7 + +( ) 7. 以下关于字符串的判定语句中正确的是( )。 +A. 字符串是一种特殊的线性表  B. 串的长度必须大于零 +C. 字符串不可以用数组来表示  D. 空格字符组成的串就是空串 + +( ) 8. 10000 以内,与 10000 互质的正整数有( )个。 +A. 2000  B. 4000  C. 6000  D. 8000 + +( ) 9. 前序遍历序列与中序遍历序列相同的二叉树为( )。 +A. 根结点无左子树 +B. 根结点无右子树 +C. 只有根结点的二叉树或非叶子结点只有左子树的二叉树 +D. 只有根结点的二叉树或非叶子结点只有右子树的二叉树 + +( ) 10. 设含有10个元素的集合的全部子集数为 $S$ ,其中由7个元素组成的子集数为 $T$ ,则 $T / S$ 的值为( )。 +A. `5 / 32`  B. `15 / 128`  C. `1 / 8`  D. `21 / 128` + +( ) 11. Lucia 和她的朋友以及朋友的朋友都在某社交网站上注册了账号。下图是他们之间的关系图,两个人之间有边相连接这两个人是朋友,没有边相连代表不是朋友。这个社交网站的规则是:如果某人人向他(她)的朋友 B 分享了某张照片,那么 B 就可以对该照片进行评论;如果 B 评论了该照片,那么他(她)的所有朋友都可以看见这个评论以及被评论的照片,但是不能对该照片进行评论(除非 A 也向他(她)分享了该照片)。现在 Lucia 已经上传了一张照片,但是她不想让 Jacob 看见这张照片,那么她可以向以下朋友( )分享该照片。 +题目图示 + +A. Dana, Michael, Eve  B. Dana, Eve, Monica +C. Michael, Eve, Jacob  D. Micheal, Peter, Monica + +( ) 12. 为了统计一个非负整数的二进制形式中 1 的个数,代码如下: +int CountBit(int x) +{ +int ret = 0; +while (x) +{ +ret++; +___________; +} +return ret; +} +则空格内要填入的语句是( )。 +A. `x >>= 1`  B. `x &= x - 1`  C. `x |= x >> 1`  D. `x <<= 1` + +( ) 13. 新学期开学了,小胖想减肥,健身教练给小胖制定了两个训练方案。方案一:每次连续跑3公里可以消耗300千卡(耗时半小时);方案二:每次连续跑5公里可以消耗600千卡(耗时1小时)。小胖每周周一到周四能抽出半小时跑步,周五到周日能抽出一小时跑步。另外,教练建议小胖每周最多跑21公里,否则会损伤膝盖。 +请问如果小胖想严格执行教练的训练方案,并且不想损伤膝盖,每周最多通过跑步消耗多少千卡?( ) +A. 3000  B. 2500  C. 2400  D. 2520 + +( ) 14. 有 10 个顶点的无向图至少应该有( )条边才有可能构成连通图。 +A. 9  B. 10  C. 11  D. 12 + +( ) 15. Linux下可执行文件的默认扩展名为( )。 +A. exe  B. com  C. dll  D. 以上都不是 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 12 小题,共计 27 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 #define MAXN 20 + 4 int gu[MAXN][MAXN]; + 5 int luo(int n, int m) { + 6 if(n <= 1 || m < 2) + 7 return 1; + 8 if(gu[n][m] != -1) + 9 return gu[n][m]; +10 int ans=0; +11 for(int i = 0; i > n >> m; +19 for(int i = 0; i < MAXN; i++) +20 for(int j = 0; j < MAXN; j++) +21 gu[i][j]= -1; +22 cout << luo(n, m); +23 return 0; +24 } +``` + +**判断题** + +( ) 16. (1分) luo函数中,m的值不可能是奇数。( ) + +( ) 17. (1分) 若将第11行的“<”改为“<=”,程序的输出结果可能会改变。( ) + +( ) 18. (2分) 若将第8、9、13行删除,程序的运行的结果不变。( ) + +( ) 19. (2分) 在添加合适的头文件后,将第19到21行替换为“memset(gu, 255,sizeof(gu));”可以起到相同的作用。( ) + +**单选题** + +( ) 20. (4分) 若输入数据为4 8,则输出为( )。 +A. 7  B. 8  C. 15  D. 16 + +( ) 21. (3分) 最坏情况下,此程序的时间复杂度是( )。 +A. `O(m²n)`  B. `O(nm!)`  C. `O(n²)`  D. `O(n²m)` + +**(2)** + +```cpp + 1 #include + 2 #include + 3 + 4 char base[64]; + 5 char table[256]; + 6 char str[256]; + 7 char ans[256]; + 8 + 9 void init() +10 { +11 for (int i = 0; i < 26; i++) base[i] = 'A' + i; +12 for (int i = 0; i < 26; i++) base[26 + i] = 'a' + i; +13 for (int i = 0; i < 10; i++) base[52 + i] = '0' + i; +14 base[62] = '+', base[63] = '/'; +15 +16 for (int i = 0; i < 256; i++) table[i] = 0xff; +17 for (int i = 0; i < 64; i++) table[base[i]] = i; +18 table['='] = 0; +19 } +20 +21 void decode(char *str) +22 { +23 char *ret = ans; +24 int i, len = strlen(str); +25 for (i = 0; i < len; i += 4) { +26 (*ret++) = table[str[i]] << 2 | table[str[i + 1]] >> 4; +27 if (str[i + 2] != '=') +28 (*ret++) = (table[str[i + 1]] & 0x0f) << 4 | table[str[i + 2]] >> 2; +29 if(str[i + 3] != '=') +30 (*ret++) = table[str[i + 2]] << 6 | table[str[i + 3]]; +31 } +32 } +33 +34 int main() +35 { +36 init(); +37 printf("%d\n", (int)table[0]); +38 +39 scanf("%s", str); +40 decode(str); +41 printf("%s\n", ans); +42 return 0; +43 } +``` + +假设 `char` 是 8 位有符号类型,输入字符串长度为 4 的倍数,且输入不超过数组范围。 + +**判断题** + +( ) 22. (1.5分) 输出的第二行一定是由小写字母、大写字母、数字和 `+`、`/`、`=` 构成的字符串。( ) + +( ) 23. (1.5分) 可能存在输入不同,但输出的第二行相同的情形。( ) + +( ) 24. (1.5分) 输出的第一行为 `-1`。( ) + +**单选题** + +( ) 25. (3分) 设输入字符串长度为 $n$,`decode` 函数的时间复杂度为( )。 +A. $O(\sqrt n)$  B. $O(n)$  C. $O(n\log n)$  D. $O(n^2)$ + +( ) 26. (3分) 当输入为 `Y3Nx` 时,输出的第二行为( )。 +A. `csp`  B. `csq`  C. `CSP`  D. `Csp` + +( ) 27. (3.5分) 当输入为 `Y2NmIDIwMjE=` 时,输出的第二行为( )。 +A. `ccf2021`  B. `ccf2022`  C. `ccf 2021`  D. `ccf 2022` + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 14 小题,共计 37 分,各小题分值见题目)** + +**(1)** + +(马走日)回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试其他路径。回溯法是一种选优搜索法按选向前索以达到目标。但当搜索到某一步时,若发现原先选择并优或达不到目标,则退回一步重新选择,这种走不通就退回去再走的技术称为回溯法,而满足回溯条件的某个状态的点称为回溯点。 +马在中国象棋中以日字形规则移动。请编写一段程序,给定rxc大小的棋盘以及马的初始位置(m,n),要求不能重复盘上的同一个点,计算马有多少途径可以遍历盘上的所有点。 + +```cpp + 1 #include + 2 using namespace std; + 3 int r,c; + 4 int cnt,tot; + 5 int wayr[8]={2,2,1,-1,-2,-2,1,-1}; + 6 int wayc[8]={1,-1,2,2,1,-1,-2,-2}; + 7 bool mark[1001][1001]; + 8 bool check(int x, int y) + 9 { +10 if(__(1)__) return true; +11 return false; +12 } +13 void search(int x,int y) +14 { +15 for(int i=0;i<8;i++) +16 if(__(2)__ && __(3)__) +17 { +18 mark[x+wayr[i]][y+wayc[i]]=true; +19 tot++; +20 if(__(4)__) cnt++; +21 search(__(5)__); +22 tot--; +23 mark[x+wayr[i]][y+wayc[i]]=false; +24 } +25 } +26 int main() +27 { +28 cnt=0; +29 int m,n; +30 cin>>r>>c>>m>>n; +31 if(!check(m,n)) cout<<0<=0 || y>=0 || x=0 || y>=0 && x=0 && y>=0 && x=0&&y>=0 || x + 2 using namespace std; + 3 const int SIZE = 50; + 4 int n1,m1,n2,m2,a[SIZE][SIZE],b[SIZE][SIZE]; + 5 int main() + 6 { + 7 int i,j,k1,k2; + 8 bool good ,haveAns; + 9 cin>>n1>>m1; +10 for(i=1;i<=n1;i++) +11 for(j=1;j<=m1;j++) +12 cin>>a[i][j]; +13 cin>>n2>>m2; +14 for(i=1;i<=n2;i++) +15 for(j=1;j<=m2;j++) +16 __(1)__; +17 haveAns=false; +18 for(i=1;i<=n1-n2+1;i++) +19 for(j=1;j<= __(2)__;j++){ +20 __(3)__; +21 for(k1=1;k1<=n2;k1++) +22 for(k2=1;k2<=__(4)__ ;k2++){ +23 if(a[i+k1-1][j+k2-1]!=b[k1][k2]) +24 good=false; +25 } +26 if(good){ +27 cout< + 2 using namespace std; + 3 int delnum( char *s ) + 4 { + 5 int i, j; + 6 j = 0; + 7 for ( i = 0; s[i] != '\0'; i++ ) + 8 if ( s[i] < '0' __(1)__ s[i] > '9' ) + 9 { +10 s[j] = s[i]; +11 __(2)__; +12 } +13 return(__(3)__); +14 } +15 const int SIZE = 30; +16 int main() +17 { +18 char s[SIZE]; +19 int len, i; +20 cin.getline( s, sizeof(s) ); +21 len = delnum( s ); +22 for ( i = 0; i < len; i++ ) +23 cout << __(4)__; +24 cout << endl; +25 return 0; +26 } +``` + +( ) 38. (3分) (1)处应填:________________ + +( ) 39. (3分) (2)处应填:________________ + +( ) 40. (3分) (3)处应填:________________ + +( ) 41. (3分) (4)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第16套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第16套.md new file mode 100644 index 0000000..5844a78 --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第16套.md @@ -0,0 +1,347 @@ +
CSP-J 初赛模拟卷(第 16 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 在 PC 机中,PENTIUM(奔腾)、酷睿、赛扬等是指( )。 +A. 生产厂家名称  B. 硬盘的型号  C. CPU 的型号  D. 显示器的型号 + +( ) 2. 1TB代表的字节数是( )。 +A. 2的10次方  B. 2的20次方  C. 2的30次方  D. 2的40次方 + +( ) 3. 如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为 $a, b, c$ ,另有元素 $d$ 已经出栈,则可能的入栈顺序是( )。 +A. $a, d, c, b$  B. $b, a, c, d$  C. $a, c, b, d$  D. $d, a, b, c$ + +( ) 4. 设 $X$ 、Y、Z分别代表三进制下的一位数字,若等式 $XY + ZX = XYX$ 在三进制下成立,那么同样在三进制下,等式 $XY * ZX = ()$ 也成立。 +A. Y X Z  B. Z X Y  C. X Y Z  D. X Z Y + +( ) 5. 一棵具有5层的满二叉树中结点数为( )。 +A. 31  B. 32  C. 33  D. 16 + +( ) 6. 给定含有 n 个互不相同元素的单峰数组 L,满足先严格递增、后严格递减,峰顶位于数组内部。用下面的二分算法寻找峰顶,请将 a、b、c 三行代码依次填入空白处。正确的填空顺序是( )。 + +```text +a. return Search(k + 1, r) +b. return Search(l, k - 1) +c. return L[k] + +Search(l, r): + if l == r then return L[l] + k = floor((l + r) / 2) + if L[k] > L[k - 1] and L[k] > L[k + 1]: ______ + else if L[k] < L[k + 1]: ______ + else: ______ + +调用 Search(2, n - 1) +``` + +A. c,a,b  B. c,b,a  C. a,b,c  D. b,a,c + +( ) 7. 表达式 $a*(b + c)*d$ 的后缀形式是( )。 +A. $a b c d * + *$  B. $a b c + * d *$  C. $a * b c + * d$  D. $b + c * a * d$ + +( ) 8. 现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。若待合并结点权值相同,优先选取由其他结点合并形成的结点。那么,“也”字的编码长度可能是( )。 +A. 1  B. 2  C. 3  D. 4 + +( ) 9. 假设一棵二叉树的后序遍历序列为 DGJHEBIFCA,中序遍历序列为DBGEHJACIF,则其前序遍历序列为( )。 +A. ABCDEFGHIJ  B. ABDEGHJCFI  C. ABDEGJHCFI  D. ABDEGHJFIC + +( ) 10. 若有如下程序段,其中 $s$ 、 $a$ 、 $b$ 、 $c$ 均已定义为整型变量,且 $a$ 、 $c$ 均已赋值($c$ 大于0)。 +$$ +\begin{array}{r l} & \text {s = a;} \\ & \text {for (b = 1;b < = c; b++)} \\ & \text {s = s + 1;} \end{array} +$$ +则与上述程序段修改 s 值的功能等价的赋值语句是( )。 +A. $s = a + b$  B. $s = a + c$  C. $s = s + c$  D. $s = b + c$ + +( ) 11. 以 $A_0$ 作为起点,对下面的无向图进行深度优先遍历时,遍历顺序不可能是( )。 +题目图示 + +A. $A_0, A_1, A_2, A_3$  B. $A_0, A_1, A_3, A_2$  C. $A_0, A_2, A_1, A_3$  D. $A_0, A_3, A_1, A_2$ + +( ) 12. 完全二叉树的顺序存储方案,是指将完全二叉树的结点从上至下、从左至右依次存放到一个顺序结构的数组中。假定根结点存放在数组的1号位置,则第k号结点的父结点如果存在的话,应当存放在数组的( )号位置。 +A. 2k  B. $2k + 1$  C. $k / 2$ 下取整  D. $(k + 1) / 2$ 下取整 + +( ) 13. 周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。假设做每道菜的顺序都是:先洗菜10分钟,然后切菜10分钟,最后炒菜10分钟。那么做一道菜需要30分钟。注意:两道不同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗,也不能同时切。那么做完三道菜的最短时间需要( )分钟。 +A. 90  B. 60  C. 50  D. 40 + +( ) 14. 有向图中每个顶点的度等于该顶点的( )。 +A. 入度  B. 出度  C. 入度和出度之和  D. 入度和出度之差 + +( ) 15. 干支纪年法是中国传统的纪年方法,由10个天干和12个地支组合成60个天干地支。由公历年份可以根据以下公式和表格换算出对应的天干地支。 +天干 = ( 公历年份 ) 除以10所得余数 +地支 = ( 公历年份 ) 除以12所得余数 +| 天干 | 甲 | 乙 | 丙 | 丁 | 戊 | 己 | 庚 | 辛 | 壬 | 癸 | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 2 | 3 | | | +| 地支 | 子 | 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 | +| | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 0 | 1 | 2 | 3 | +例如,今年是2020年,2020除以10余数为0,查表为“庚”;2020除以12余数为4,查表为“子”所以今年是庚子年。请问1949年的天干地支息{。 +A. 己酉  B. 己亥  C. 己丑  D. 己卯 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 42 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 + 4 int n; + 5 int d[1000]; + 6 + 7 int main() { + 8 cin >> n; + 9 for (int i = 0; i < n; ++i) +10 cin >> d[i]; +11 int ans = -1; +12 for (int i = 0; i < n; ++i) +13 for (int j = 0; j < n; ++j) +14 if (d[i] < d[j]) +15 ans = max(ans, d[i] + d[j] - (d[i] & d[j])); +16 cout << ans; +17 return 0; +18 } +``` + +假设输入的n和d[i]都是不超过10000的正整数,完成下面的判断题和单选题: + +**判断题** + +( ) 16. (1.5分) n必须小于1000,否则程序可能会发生运行错误。( ) + +( ) 17. (1.5分) 输出一定大于等于0。( ) + +( ) 18. (1.5分) 若将第13行的“j = 0”改为“j = i + 1”,程序输出可能会改变。( ) + +( ) 19. (1.5分) 将第14行的“d[i] < d[j]”改为“d[i] != d[j]”,程序输出不会改变。( ) + +**单选题** + +( ) 20. (3分) 若输入 $n$ 为100,且输出为127,则输入的d[i]中不可能有( )。 +A. 127  B. 126  C. 128  D. 125 + +( ) 21. (3分) 若输出的数大于0,则下面说法正确的是( )。 +A. 若输出为偶数,则输入的d[i]中最多有两个偶数 +B. 若输出为奇数,则输入的d[i]中至少有两个奇数 +C. 若输出为偶数,则输入的d[i]中至少有两个偶数 +D. 若输出为奇数,则输入的d[i]中最多有两个奇数 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 const int maxn = 10000; + 4 int n; + 5 int a[maxn]; + 6 int b[maxn]; + 7 int f(int l, int r, int depth) { + 8 if (l > r) + 9 return 0; +10 int min = a[l], mink = l; +11 for (int i = l; i <= r; ++i) { +12 if (min > a[i]) { +13 min = a[i]; +14 mink = i; +15 } +16 } +17 int lres = f(l, mink - 1, depth + 1); +18 int rres = f(mink + 1, r, depth + 1); +19 return lres + rres + depth * b[mink]; +20 } +21 int main() { +22 cin >> n; +23 for (int i = 0; i < n; ++i) +24 cin >> a[i]; +25 for (int i = 0; i < n; ++i) +26 cin >> b[i]; +27 cout << f(0, n - 1, 1) << endl; +28 return 0; +29 } +``` + +**判断题** + +( ) 22. (1.5分) 如果a数组有重复的数字,则程序运行时会发生错误。( ) + +( ) 23. (1.5分) 如果b数组全为0,则输出为0。( ) + +**单选题** + +( ) 24. (3分) 当 $n = 100$ 时,最坏情况下,与第12行的比较运算执行的次数最接近的是:( )。 +A. 5000  B. 600  C. 6  D. 100 + +( ) 25. (3分) 当n=100时,最好情况下,与第12行的比较运算执行的次数最接近的是:( )。 +A. 100  B. 6  C. 5000  D. 600 + +( ) 26. (3分) 当 $n = 10$ 时,若 $b$ 数组满足,对任意 $0 < = i < n,$ 都有 $b[i] = i + 1$ ,那么输出最大为( )。 +A. 386  B. 383  C. 384  D. 385 + +( ) 27. (4分) 当 $n = 100$ 时,若 $b$ 数组满足,对任意 $0 < = i < n,$ 都有 $b[i] = 1$ ,那么输出最小为( )。 +A. 582  B. 580  C. 579  D. 581 + +**(3)** + +```cpp + 1 #include + 2 using namespace std; + 3 #define MOD 19260817 + 4 #define MAXN 1005 + 5 long long A[MAXN][MAXN]={0},sum[MAXN][MAXN]={0}; + 6 int n, m, q; + 7 int main(){ + 8 A[1][1]=A[1][0]=1; + 9 for(int i=2;i <= 1000; i++) { +10 A[i][0]=1; +11 for(int j = 1; j <= i; j++) +12 A[i][j]=(A[i-1][j]+A[i-1][j-1])%MOD; +13 } +14 for(int i =1;i <= 1000; i++) +15 for(int j=1;j<=1000;j++) +16 sum[i][j]=(sum[i-1][j]+sum[i][j-1] +17 -sum[i-1][j-1]+A[i][j]+MOD)%MOD; +18 int q; +19 cin >> q; +20 while(q--){ +21 int n, m; +22 cin >> n >> m; +23 cout << sum[n][m] << endl; +24 } +25 return 0; +26 } +``` + +**判断题** + +( ) 28. (1分) 当i<=j时,A[i][i]的值是0。( ) + +( ) 29. (2分) 当i>j时,A[i][j]的值相当于从i个不同元素中取出j个元素的排列数。( ) + +( ) 30. (2分) sum[i][j]的值(1 + 2 using namespace std; + 3 int readint(){ + 4 int num = 0; // 存储读取到的整数 + 5 int negative = 0; // 负数标识 + 6 char c; // 存储当前读取到的字符 + 7 c = cin.get(); + 8 while ((c < '0' || c > '9') && c != '-') + 9 c = __(1)__; +10 if (c == '-') +11 negative = 1; +12 else +13 __(2)__; +14 c = cin.get(); +15 while (__(3)__){ +16 __(4)__; +17 c = cin.get(); +18 } +19 if (negative == 1) +20 __(5)__; +21 return num; +22 } +23 int main() +24 { +25 int a, b; +26 a = readint(); +27 b = readint(); +28 cout << a << endl +29 << b << endl; +30 return 0; +31 } +``` + +( ) 34. (2.5分) (1)处应填:________________ + +( ) 35. (3分) (2)处应填:________________ + +( ) 36. (3分) (3)处应填:________________ + +( ) 37. (3分) (4)处应填:________________ + +( ) 38. (2.5分) (5)处应填:________________ + +**(2)** + +完善程序: + +(中位数 median) 给定 $n(n$ 为奇数且小于 1000)个整数,整数的范围在 $0 - m (0 < m < 2^{31})$ 之间,请使用二分法求这 $n$ 个整数的中位数。所谓中位数,是指将这 $n$ 个排序之后,排在正中间的数。 + +```cpp + 1 #include + 2 using namespace std; + 3 const int MAXN = 1000; + 4 int n, i, lbound, rbound, mid, m, count; + 5 int x[MAXN]; + 6 int main() + 7 { + 8 cin >> n >> m; + 9 for (i = 0; i < n; i++) +10 cin >> x[i]; +11 lbound = 0; +12 rbound = m; +13 while (__(1)__) +14 { +15 mid = lbound + (rbound - lbound) / 2; +16 __(2)__; +17 for (i = 0; i < n; i++) +18 if (__(3)__) +19 __(4)__; +20 if (count > n / 2) +21 lbound = mid + 1; +22 else +23 __(5)__; +24 cout << mid << " " << lbound << " " << rbound << " " << count << endl; +25 } +26 cout << rbound << endl; +27 return (0); +28 } +``` + +( ) 39. (3分) (1)处应填:________________ + +( ) 40. (3分) (2)处应填:________________ + +( ) 41. (3分) (3)处应填:________________ + +( ) 42. (3分) (4)处应填:________________ + +( ) 43. (2分) (5)处应填:________________ diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第17套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第17套.md new file mode 100644 index 0000000..09b82ab --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第17套.md @@ -0,0 +1,334 @@ +
CSP-J 初赛模拟卷(第 17 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 十进制数 114 的相反数的8位二进制补码是: +A. 10001110  B. 10001101  C. 01110010  D. 01110011 + +( ) 2. 以下哪个网站不是 Online Judge(在线程序判题系统)?Online Judge 可以查看算法题目,提交自己编写的程序,然后可以获得评测机反馈的结果。 +A. Luogu  B. Gitee  C. LeetCode  D. Codeforces + +( ) 3. 小A用字母A表示1,B表示2,以此来推,用 Z 表示 26。对于27以上的数,可以用两位或者更长的字符串来对应,例如AA对应27,AB 对应 28,AZ 对应52,AAA 对应703……那么BYT 字符串对应的数字是什么? +A. 2018  B. 2020  C. 2022  D. 2024 + +( ) 4. UIM 拍摄了一张照片,其分辨率是 4096× 2160,每一个像素都是 24位真彩色。在没有压缩的情况下,这张图片占用空间接近以下哪个值? +A. 8MB  B. 25MB  C. 200MB  D. 200KB + +( ) 5. 在一个长度为n的数组中找到第k大的数字,平均的算法时间复杂度最低的是 +A. `O (n)`  B. `O (nk)`  C. `O (nlogn)`  D. `O (n^2)` + +( ) 6. 对于“树”这种数据结构,正确的有: +①一个有n个顶点、n-1 条边的图是树 +②一个树中的两个顶点之间有且只有一条简单路径 +③树中一定存在度数不大于 1的顶点 +④树可能存在环 +A. ①②④  B. ①②③  C. ②③  D. ①② + +( ) 7. 博艾中学进行了一次信息学会考测试,其优、良、及格、不及格的试卷数量分别为10、13、14、5张。现在这些卷子混在一起,要将这些卷子按照等级分为4叠。分卷子的方法是,每次将一叠有不同等级答卷的卷子分为两堆,使得这两堆中没有相同等级的卷子,然后可以再分,直到分为4叠。要分完这些卷子,至少需要多少次“分卷子”的操作? 将一堆数量为n的卷子分成两堆,就会产生n次分卷子的操作。 +A. 84  B. 93  C. 78  D. 85 + +( ) 8. 一个二叉树的前序遍历是HGBDAFEC,中遍历是BGHFAEDC,同时采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i,则其左孩子位于下标2i处、右孩子位于下标2i+1处),则该数组的最大下标至少为( ) +A. 7  B. 13  C. 15  D. 12 + +( ) 9. 在C++语言中,如果a=1;b=0;c=1;那么以下表达式中为1的是: +A. `a&&b||b&&c`  B. `a+b>c||b`  C. `!(!c&&(!a||b))`  D. `a+b+c` + +( ) 10. 在一个初始长度为n的链表中连续进行k次操作,每次操作是读入两个数字a_i和b_i,在链表中找到元素为a_i的结点(假设一定可以找到),然后将这b_i个元素插入到这个结点前面。在最理想的情况下,链表访问的结点数量最少可能是多少(不算将要插入的结点)? +A. n次  B. k次  C. nk次  D. `n+k次` + +( ) 11. A班有5名风纪委员,B班有4名风纪委员,C班有3名风纪委员。现在需要这些同学中选取6名风纪委员巡逻,如果只关注各班派出的风纪委员人数,有几种不同的方案? +A. 9  B. 12  C. 15  D. 18 + +( ) 12. 以下哪种排序算法的时间复杂度是O(n^2)? +A. 计数排序  B. 插入排序  C. 希尔排序  D. 归并排序 + +( ) 13. 已知rand()可以生成一个0到32767的随机整数,如果希望得到一个范围在[a,b)的随机整数,a和b均是不超过100的正整数且a + 2 using namespace std; + 3 #define MAXN 20 + 4 int gu[MAXN][MAXN]; + 5 int luo(int n, int m) { + 6 if(n <= 1 || m < 2) + 7 return 1; + 8 if(gu[n][m] != -1) + 9 return gu[n][m]; +10 int ans=0; +11 for(int i = 0; i > n >> m; +19 for(int i = 0; i < MAXN; i++) +20 for(int j = 0; j < MAXN; j++) +21 gu[i][j]= -1; +22 cout << luo(n, m); +23 return 0; +24 } +``` + +**判断题** + +( ) 16. (1分) luo函数中,m的值不可能是奇数。( ) + +( ) 17. (1分) 若将第11行的“<”改为“<=”,程序的输出结果可能会改变。( ) + +( ) 18. (2分) 若将第8、9、13行删除,程序的运行的结果不变。( ) + +( ) 19. (2分) 在添加合适的头文件后,将第19 到 21 行替换为“memset(gu, 255,sizeof(gu));”可以起到相同的作用。( ) + +**单选题** + +( ) 20. (4分) 若输入数据为 4 8,则输出为( )。 +A. 7  B. 8  C. 15  D. 16 + +( ) 21. (3分) 最坏情况下,此程序的时间复杂度是( )。 +A. $O(m^2n)$  B. $O(mn!)$  C. $O(n^2)$  D. $O(n^2m)$ + +**(2)** + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 int n, m; + 5 int f[101][101]; + 6 int F[101][101]; + 7 int main(){ + 8 scanf("%d%d",&n,&m);//n的值在1到100之间 + 9 memset(f,-1,sizeof(f)); +10 for(int i = 1; i <= m; i++) { +11 int u,v,w;//w的值在0到10000之间 +12 scanf("%d%d%d",&u,&v,&w); +13 f[u][v]=f[v][u]=w; +14 } +15 for(int k = 1; k <= n; k++) +16 for(int i=1;i <=n; i++) +17 for(int j=1;j<= n; j++) +18 if(f[i][k]!=-1&&f[k][j]!=-1) +19 if(f[i][j]==-1||f[i][j]>f[k][j]+f[i][k]) +20 f[i][j]=f[i][k]+f[k][j]; +21 int ans=2147483647; +22 for(int i=1;i<=n;i++) +23 for(int j=1;j<=n; j++){ +24 for(int x=1;x<=n; x++) +25 for(int y=1;y<=n; y++) +26 F[x][y]=f[x][y]; +27 F[i][j]=F[j][i]=0; +28 for(int x=1;x<= n; x++) +29 for(int y=1;y<=n; y++) +30 if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y]) +31 F[x][y]=F[x][i]+F[i][y]; +32 for(int x=1;x<=n; x++) +33 for(int y=1;y<=n; y++) +34 if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y]) +35 F[x][y]=F[x][j]+F[j][y]; +36 int res=0; +37 for(int x=1;x<=n; x++) +38 for(int y=1;y + 2 using namespace std; + 3 #define MOD 19260817 + 4 #define MAXN 1005 + 5 long long A[MAXN][MAXN]={0},sum[MAXN][MAXN]={0}; + 6 int n, m, q; + 7 int main(){ + 8 A[1][1]=A[1][0]=1; + 9 for(int i=2;i <= 1000; i++) { +10 A[i][0]=1; +11 for(int j = 1; j <= i; j++) +12 A[i][j]=(A[i-1][j]+A[i-1][j-1])%MOD; +13 } +14 for(int i =1;i <= 1000; i++) +15 for(int j=1;j<=1000;j++) +16 sum[i][j]=(sum[i-1][j]+sum[i][j-1] +17 -sum[i-1][j-1]+A[i][j]+MOD)%MOD; +18 int q; +19 cin >> q; +20 while(q--){ +21 int n, m; +22 cin >> n >> m; +23 cout << sum[n][m] << endl; +24 } +25 return 0; +26 } +``` + +**判断题** + +( ) 28. (1分) 当i<=j时,A[i][i]的值是0。( ) + +( ) 29. (2分) 当i>j时,A[i][j]的值相当于从i个不同元素中取出j个元素的排列数。( ) + +( ) 30. (2分) sum[i][j]的值(1 + 2 using namespace std; + 3 #define MAXN 300005 + 4 int n, ans=0, a[MAXN], in[MAXN]={0}; + 5 bool vis[MAXN]={0}; + 6 void dfs(int cur, int w){ + 7 if(vis[cur]) + 8 return; + 9 vis[cur]=true; +10 if(w==1) ans++; +11 __(1)__ +12 if(__(2)__) +13 dfs(a[cur], __(3)__); +14 } +15 int main(){ +16 scanf("%d",&n); +17 for(int i=1;i <=n; i++) { +18 scanf("%d", &a[i]); +19 in[a[i]]++; +20 } +21 for(int i=1;i <= n; i++) +22 if(!in[i]) __(4)__; +23 for(int i=1;i<=n; i++) +24 if(__(5)__) dfs(i,0); +25 printf("%d\n",ans); +26 return 0; +27 } +``` + +( ) 34. (3分) (1)处应填 +A. `a[cur]=cur;`  B. `in[a[cur]]=0;`  C. `in[a[cur]]--;`  D. `in[cur]--;` + +( ) 35. (3分) (2)处应填 +A. `in[a[cur]] != 0 || w == 1`  B. `in[a[cur]]==0||w==0` +C. `in[a[cur]]!=0||w==0`  D. `in[a[cur]]==0||w==1` + +( ) 36. (3分) (3)处应填 +A. 0  B. 1  C. w  D. 1-w + +( ) 37. (3分) (4)处应填 +A. `dfs(i,1)`  B. `dfs(i,0)`  C. `dfs(a[i], 1)`  D. `dfs(a[i], 0)` + +( ) 38. (3分) (5)处应填 +A. `!in[i]`  B. `in[i]`  C. `!vis[i]`  D. `vis[I]` + +**(2)** + +(烧作业)某课作业布置了N(3≤N≤10000)个题目,第i题对应的得分是a。作业的总得分的计算方式为去掉作业中得分最小的一个题,剩下其它所有题目得分的平均值。但很不幸小A遇到了一场火灾,前K(1 + 2 #include + 3 #define min(a,b)(a=2;i--) { +16 minScore=min(minScore,s[i]); +17 __(2)__; +18 nowAverage=__(3)__; +19 if(nowAverage> maxAverage){ +20 __(4)__ +21 maxAverage=nowAverage; +22 } else if(fabs(nowAverage-maxAverage)<1e-6) +23 __(5)__; +24 } +25 for(int i=cnt; i >= 1; i--) +26 printf("%d\n",k[i]); +27 return 0; +28 } +``` + +( ) 39. (3分) (1)处应填 +A. `sum=n`  B. `sum=s[1]`  C. `sum=s[n]`  D. `sum=0` + +( ) 40. (3分) (2)处应填 +A. `sum=maxAverage*(n-i)`  B. `sum+=s[i]` +C. `sum+=s[n-i]`  D. `sum=s[i]+minScore` + +( ) 41. (3分) (3)处应填 +A. `(double)(sum+minScore)/(n-i)`  B. `sum*1.0/(n-i)` +C. `(int)(sum-minScore)/(n-i)`  D. `(double)(sum-minScore)/(n-i)` + +( ) 42. (3分) (4)处应填 +A. `k[++cnt]=i;`  B. `k[cnt++]=i-1` +C. `cnt=1;k[cnt]=i-1;`  D. `cnt=0;k[cnt]=I;` + +( ) 43. (3分) (5)处应填 +A. `k[cnt++]=i;`  B. `k[++cnt]=i-1;`  C. `k[cnt++] =n-i;`  D. `k[cnt]=i;` diff --git a/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第18套.md b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第18套.md new file mode 100644 index 0000000..c9264df --- /dev/null +++ b/2.Course/5.C++_Exam/NOI/CSP-J 初赛模拟卷/试题/CSP-J初赛模拟卷·第18套.md @@ -0,0 +1,394 @@ +
CSP-J 初赛模拟卷(第 18 套)
+
入门级 C++ 语言试题
+ +--- + +#### **一、单项选择题(共 15 题,每题 2 分,共计 30 分)** + +( ) 1. 已知十进制中的18在x的进制中的表示为24,即(18)_10=(24)_x,则这个x进制为( )进制。 +A. 9  B. 8  C. 7  D. 6 + +( ) 2. 根据网址的域名 `http://www.jiangsu.gov.cn/`,可以判断该网站是( )类型的网站。 +A. 商业机构  B. 军事机构  C. 政府机构  D. 组织机构 + +( ) 3. 与计算机硬件关系最密切的软件是( )。 +A. 编译程序  B. 操作系统  C. 游戏程序  D. 数据库管理程序 + +( ) 4. 下列程序段执行后s的值为( )。 +```cpp +int i = 1, s = 0; +while (i++) + if (!(i % 3)) break; + else s += i; +``` +A. 6  B. 3  C. 2  D. 以上均不是 + +( ) 5. 将19分解成3个不重复数字(1~9)之和(不计顺序)的方法有( )种。 +A. 6  B. 5  C. 4  D. 3 + +( ) 6. 甲、乙、丙三位同学选修课程,在四门课程中,甲选修两门,乙、丙各选修三门,则不同选修方案共有( )种。 +A. 36  B. 48  C. 64  D. 96 + +( ) 7. 已知某二叉树的先序遍历序列是 ABDCE,中序遍历序列是 BDAEC,则该二叉树的后序遍历为( )。 +A. BDECA  B. DBECA  C. DBCEA  D. BDCEA + +( ) 8. 计算机启动时,可以通过存储在( )中的引导程序引导操作系统。 +A. ROM  B. RAM  C. Cache  D. CPU + +( ) 9. 表达式a+b\*c-(d+e)的前缀形式是( ) +A. `abc*+de+-`  B. `-+*abc+de`  C. `-+a*bc+de`  D. `abcde*++-` + +( ) 10. 小军在家玩关灯游戏,小军家的灯有三种颜色分别是白、黄、红。按1下白灯亮,按2下灯灭,按3下黄灯亮,按4下灯灭,按5下红灯亮,按6下灯灭,再按又是白灯亮,以此循环。当按到49次和100次时灯的状态是( )。 +A. 灯灭,灯灭  B. 红灯亮,灯灭  C. 白灯亮,红灯亮  D. 白灯亮,灯灭 + +( ) 11. 704与2048的最小公倍数是( )。 +A. 45 056  B. 22 528  C. 180 224  D. 90 112 + +( ) 12. 在( )的情况下,逻辑 $A\lor B$ 运算的结果是逻辑“0”。 +A. A和B全部是1  B. A和B任一是1  C. A和B全部是0  D. A和B任一是0 + +( ) 13. 小明夫妇请了小刚夫妇和小伟夫妇来他们家玩扑克。这种扑克游戏有一种规则:夫妇两人不能一组。小明和小红一组,小刚的队友是小伟的妻子,琳达的丈夫和小丽一组。那么这三对夫妇分别为( ) +A. 小明-小丽,小刚-琳达,小伟一小红  B. 小明-琳达,小刚-小红,小伟-小丽 +C. 小明-小丽,小刚-小红,小伟一琳达  D. 小明-小红,小刚-小丽,小伟-琳达 + +( ) 14. 4人过桥,每人单独过桥分别需要用时1分、2分、5分、10分,过桥需要灯(只有一盏),一次只能2人一起过(意味着需要有人送灯回来),过桥时间以用时多的人为准,则4人全部过桥时间最少需要( )分。 +A. 15  B. 16  C. 17  D. 18 + +( ) 15. 2000 年,华人学者姚期智因在计算理论(包括伪随机数生成、密码学与通信复杂度)方面的突出成就而荣获( ) +A. 图灵奖  B. 奥斯卡奖  C. 诺贝尔奖  D. 普利策奖 + +--- + +#### **二、阅读程序(程序输入不超过数组或字符串定义的范围,判断题正确填 √,错误填 ×;共 18 小题,共计 37.5 分,各小题分值见题目)** + +**(1)** + +```cpp + 1 #include + 2 using namespace std; + 3 int main() + 4 { + 5 const int SIZE=10; + 6 int height[SIZE],num[SIZE],n,ans; + 7 cin>>n; + 8 for(int i=0;i>height[i]; +10 num[i]=1; +11 for(int j=0;j=num[i])) +13 num[i]=num[j]+1; +14 } +15 } +16 ans=0; +17 for(int i=0;ians) ans=num[i]; +19 } +20 cout<=num[i]”改为“num[j]>num[i]”,程序的输出结果不会改变。( ) + +( ) 19. (1.5分) 将18行“num[i]>ans”改为“num[i]>=ans”,程序的输出结果不会改变。( ) + +**单选题** + +( ) 20. (3分) 若输入的数据为 +10 +1 1 1 1 1 1 1 1 1 1 +则程序的输出结果是( )。 +A. 4  B. 3  C. 2  D. 1 + +( ) 21. (3分) 若输人的数据为 +10 +3 2 5 11 12 7 4 10 15 6 +因程序的输出结果是( )。 +A. 4  B. 5  C. 6  D. 7 + +**(2)** + +```cpp + 1 #include + 2 using namespace std; + 3 int n,m,i,j,p,k; + 4 int a[100],b[100]; + 5 int main() + 6 { + 7 cin>>n>>m; + 8 a[0]=n;i=0;p=0;k=1; + 9 do{ +10 for(j=0;j + 2 using namespace std; + 3 const int V = 101; + 4 int n, m, ans, e[V][V]; + 5 bool visited[V]; + 6 void dfs(int x, int len) + 7 { + 8 int i; + 9 visited[x] = true; +10 if (len > ans) ans = len; +11 for (i = 1; i <= n; i++) +12 if ((!visited[i]) && (e[x][i] != -1)) +13 dfs(i, len + e[x][i]); +14 visited[x] = false; +15 } +16 int main() +17 { +18 int i, j, a, b, c; +19 cin >> n >> m; +20 for (i = 1; i <= n; i++) +21 for (j = 1; j <= n; j++) +22 e[i][j] = -1; +23 for (i = 1; i <= m; i++) { +24 cin >> a >> b >> c; +25 e[a][b] = c; +26 e[b][a] = c; +27 } +28 for (i = 1; i <= n; i++) +29 visited[i] = false; +30 ans = 0; +31 for (i = 1; i <= n; i++) +32 dfs(i, 0); +33 cout << ans << endl; +34 return 0; +35 } +``` + +输入表示一个没有重边、自环的无向图,顶点编号为 1 到 $n$,且 $1\le n\le100$、边权为正整数。 + +**判断题** + +( ) 28. (1.5分) 第 19 行的输入中,如果满足 $m=n(n-1)/2$,则第 20~22 行的初始化可以省略。( ) + +( ) 29. (1.5分) 将第 31 行改为 `for (i = n; i >= 1; i--)`,程序结果不受影响。( ) + +**单选题** + +( ) 30. (1.5分) 若输入如下,则程序输出为( )。 +```text +4 2 +1 2 1 +3 4 1 +``` + +A. 8  B. 4  C. 2  D. 1 + +( ) 31. (3分) 若输入如下,则程序输出为( )。 +```text +4 6 +1 2 1 +2 3 1 +3 4 1 +4 1 1 +1 3 1 +2 4 1 +``` + +A. 1  B. 3  C. 5  D. 7 + +( ) 32. (3分) 若输入如下,则程序输出为( )。 +```text +4 3 +1 2 10 +2 3 20 +3 1 30 +``` + +A. 30  B. 50  C. 90  D. 120 + +( ) 33. (3分) 若输入如下,则程序输出为( )。 +```text +4 6 +1 2 10 +2 3 20 +3 4 30 +4 1 40 +1 3 50 +2 4 60 +``` + +A. 60  B. 100  C. 150  D. 200 + +--- + +#### **三、完善程序(程序输入不超过数组或字符串定义的范围;共 10 小题,共计 30 分,各小题分值见题目)** + +**(1)** + +(高精度计算)由于计算机运算的数据范围表示有一定限制,如整型int表达范围是(-2^31~2^31-1),unsigned long(无符号整数)是(0~2^32-1),都约为几十亿,因此在计算位数超过十几位的数时,不能采用现有类型,只能自己编程计算。 +高精度计算通用方法:高精度计算时一般用一个数组存储一个数,数组的一个元素对应于数的一位,将数由低位到高位依次存储在数组下标对应的由低到高的位置上。另外,申请数组大小时,一般考虑了最大的情况,在很多情况下表示有富裕,即高位有很多0,可能造成无效的运算和判断,因此一般利用一个整型数据存储该数的位数。下面的程序是一个高精度整数的加法运算,请补充完整程序。 + +```cpp + 1 #include + 2 #include + 3 using namespace std; + 4 + 5 struct HugeInt{ + 6 int len; + 7 int num[100002]; + 8 }; + 9 HugeInt a, b, w; +10 char c[100001],d[100001]; +11 void Scan_HugeInt(){ +12 cin>>c; +13 cin>>d; +14 a.len=strlen(c); +15 b.len=strlen(d); +16 for(int i=0; i=1; i--) +36 cout <=0`  B. `w.num[w.len+1]==0` +C. `w.num[w.len+1]!=0`  D. `w.num[w.len +1]>1` + +**(2)** + +(马走日)回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试其他路径。回溯法是一种选优搜索法按选向前索以达到目标。但当搜索到某一步时,若发现原先选择并优或达不到目标,则退回一步重新选择,这种走不通就退回去再走的技术称为回溯法,而满足回溯条件的某个状态的点称为回溯点。 +马在中国象棋中以日字形规则移动。请编写一段程序,给定rxc大小的棋盘以及马的初始位置(m,n),要求不能重复盘上的同一个点,计算马有多少途径可以遍历盘上的所有点。 + +```cpp + 1 #include + 2 using namespace std; + 3 int r,c; + 4 int cnt,tot; + 5 int wayr[8]={2,2,1,-1,-2,-2,1,-1}; + 6 int wayc[8]={1,-1,2,2,1,-1,-2,-2}; + 7 bool mark[1001][1001]; + 8 bool check(int x, int y) + 9 { +10 if(__(1)__) return true; +11 return false; +12 } +13 void search(int x,int y) +14 { +15 for(int i=0;i<8;i++) +16 if(__(2)__ && __(3)__) +17 { +18 mark[x+wayr[i]][y+wayc[i]]=true; +19 tot++; +20 if(__(4)__) cnt++; +21 search(__(5)__); +22 tot--; +23 mark[x+wayr[i]][y+wayc[i]]=false; +24 } +25 } +26 int main() +27 { +28 cnt=0; +29 int m,n; +30 cin>>r>>c>>m>>n; +31 if(!check(m,n)) cout<<0<=0 || y>=0 || x=0 || y>=0 && x=0 && y>=0 && x=0&&y>=0|| x Cache > 内存 (RAM) > 硬盘/光盘。 - -12. **答案:B** - * **解析**:软件系统总体分为系统软件(如操作系统、驱动程序)和应用软件(如办公软件、游戏)。 - -13. **答案:D** - * **解析**:计算机系统由“硬件系统”和“软件系统”两大部分组成,“裸机”无法工作。 - -14. **答案:C** - * **解析**:Linux 是操作系统,属于系统软件。Excel、微信是应用软件。Python 解释器属于语言处理程序(广义上也属于系统软件范畴,但在 CSP-J 选项中,操作系统是最典型的系统软件,若无操作系统选项,语言处理程序可选;但此处 Linux 为最核心的系统软件)。 - -15. **答案:C** - * **解析**:寻址范围计算公式为 $2^N$。$N=16$,则 $2^{16} = 65536$ 字节 = $64$ KB。 - -16. **答案:A** - * **解析**:一条指令通常包括操作码(做什么操作)和操作数(对什么数据进行操作,通常是数据的地址)。 - -17. **答案:B** - * **解析**:计算机中存储单位采用 1024 进制($2^{10}$)。$1 \text{MB} = 1024 \text{KB}$,$1 \text{KB} = 1024 \text{Byte}$。 - -18. **答案:C** - * **解析**:VGA 和 HDMI 都是常见的视频传输接口,用于连接显示器或投影仪。 - -19. **答案:B** - * **解析**:编译程序(Compiler)的作用是将高级语言源程序整体翻译成机器语言目标程序;解释程序则是逐条翻译执行。 - -20. **答案:B** - * **解析**:在计算机内部,无论是数据(如数字、字符、图像)还是指令,最终都是以二进制代码(0 和 1)的形式存储和处理的。 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/2.NOI CSP-J 初赛:操作系统的基本概念及其常见操作.md b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/2.NOI CSP-J 初赛:操作系统的基本概念及其常见操作.md deleted file mode 100644 index fb10d24..0000000 --- a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/2.NOI CSP-J 初赛:操作系统的基本概念及其常见操作.md +++ /dev/null @@ -1,248 +0,0 @@ -# NOI CSP-J 初赛专项模拟题:操作系统的基本概念及其常见操作 - -## 一、单项选择题 - -1. 计算机系统中,负责管理和控制计算机硬件与软件资源、合理组织计算机工作流程以及方便用户使用的程序集合称为( )。 - - A. 应用软件 - - B. 操作系统 - - C. 数据库管理系统 - - D. 编译程序 - -2. 下列软件中,不属于操作系统的是( )。 - - A. Windows 11 - - B. Unix - - C. Python - - D. HarmonyOS - -3. 关于 Linux 操作系统,下列说法正确的是( )。 - - A. Linux 是单用户单任务操作系统 - - B. Linux 主要用于个人娱乐,不适合用于服务器 - - C. Linux 是开源的、免费的操作系统 - - D. Linux 系统中文件扩展名决定了文件的类型,不可随意更改 - -4. 在 Windows 系统中,通常用来表示“纯文本文件”的扩展名是( )。 - - A. .jpg - - B. .exe - - C. .txt - - D. .zip - -5. 在 Windows 操作系统中,下列文件名命名非法的是( )。 - - A. My_File.txt - - B. 2023-Data.doc - - C. A*B?.ppt - - D. CSP J 2023 - -6. 在 Windows 资源管理器或多数文本编辑器中,撤销上一步操作的快捷键通常是( )。 - - A. Ctrl + C - - B. Ctrl + V - - C. Ctrl + Z - - D. Ctrl + A - -7. 小明在整理电脑文件时,想把文件 A 从“D:\学习资料”文件夹移动到“E:\备份”文件夹,他应该进行的操作是( )。 - - A. 剪切 -> 粘贴 - - B. 复制 -> 粘贴 - - C. 删除 -> 恢复 - - D. 重命名 - -8. 某文件的大小显示为 2GB,它大约等于多少 MB?( ) - - A. 2000 MB - - B. 2048 MB - - C. 1000 MB - - D. 1024 MB - -9. 在 Windows 中,若选中一个文件并按住 Shift 键同时也按下 Delete 键,则该文件会( )。 - - A. 进入回收站,可以恢复 - - B. 被永久删除,不进入回收站(常规手段无法恢复) - - C. 被复制到剪贴板 - - D. 被重命名 - -10. 我们常说的“64位操作系统”中的“64位”指的是( )。 - - A. 内存容量 - - B. CPU 的字长(一次能处理的数据位数) - - C. 硬盘速度 - - D. 显示器色彩深度 - -11. 在操作系统中,目录(文件夹)结构通常采用( )数据结构来组织。 - - A. 线性表 - - B. 树形结构 - - C. 网状结构 - - D. 环形结构 - -12. 在 Linux 系统中,区分大小写是其重要特性之一。下列说法正确的是( )。 - - A. Test.cpp 和 test.cpp 在 Linux 下是同一个文件 - - B. Test.cpp 和 test.cpp 在 Linux 下是两个不同的文件 - - C. 只有在 Windows 下它们才是不同的文件 - - D. 只有在扩展名不同时才是不同文件 - -13. 下列选项中,主要用于智能手机和平板电脑的移动操作系统是( )。 - - A. iOS - - B. MS-DOS - - C. Linux RedHat - - D. Windows Server - -14. 如果一个文件被设置为“只读”属性,那么用户通常( )。 - - A. 不能打开该文件 - - B. 可以查看但不能修改保存该文件 - - C. 不能复制该文件 - - D. 看不到该文件 - -15. 现代操作系统(如 Windows, Linux, macOS)大都支持“多任务处理”,这意味着( )。 - - A. 计算机只能同时运行一个程序 - - B. 计算机可以同时运行多个程序,CPU 分时轮流处理 - - C. 需要多个 CPU 才能运行多个程序 - - D. 只有联网后才能运行多个程序 - -16. 在 Windows 系统中,想要快速切换当前正在运行的不同应用程序窗口,常用的快捷键是( )。 - - A. Alt + Tab - - B. Ctrl + Shift - - C. Windows + D - - D. Ctrl + Alt + Del - -17. 当我们新买了一台打印机连接到电脑上,通常需要安装“驱动程序”才能正常打印,驱动程序的作用是( )。 - - A. 提高打印机的打印速度 - - B. 充当操作系统与硬件设备之间的翻译和桥梁 - - C. 给打印机供电 - - D. 是一类文字处理软件 - -18. 操作系统中,“剪贴板”(Clipboard)的作用是作为临时存储区域,它通常位于计算机的( )中。 - - A. 硬盘 - - B. ROM - - C. 内存(RAM) - - D. 回收站 - -19. 下列哪项不属于操作系统的核心功能?( ) - - A. 处理器(CPU)管理 - - B. 编写计算机源代码 - - C. 存储器(内存)管理 - - D. 设备管理 - -20. 常见的用户界面主要分为 GUI(图形用户界面)和 CLI(命令行界面)。下列操作系统中,以提供直观的图形用户界面(GUI)而著称的是( )。 - - A. MS-DOS - - B. Windows 10 - - C. 原始的 Unix Shell - - D. BIOS 设置界面 - ------- - -## 答案与解析 - -1. **答案:B** - - **解析:** 操作系统的标准定义。它是管理计算机硬件与软件资源的程序集合,是用户和计算机的接口。 -2. **答案:C** - - **解析:** Python 是一种编程语言及其解释器,属于语言处理程序(系统软件的一种,但不是操作系统)。A、B、D 均为操作系统。 -3. **答案:C** - - **解析:** Linux 是著名的开源、免费操作系统,支持多用户多任务,广泛用于服务器。Linux 下文件扩展名不是强制的,虽然习惯上会用扩展名区分,但改了扩展名不影响文件内容和类型。 -4. **答案:C** - - **解析:** .txt 是纯文本;.jpg 是图片;.exe 是可执行程序;.zip 是压缩包。 -5. **答案:C** - - **解析:** Windows 文件名中不能包含下列字符:`\ / : * ? " < > |`。选项 C 包含了 `*` 和 `?`,是非法的。 -6. **答案:C** - - **解析:** 通用快捷键:Ctrl+C 复制,Ctrl+V 粘贴,Ctrl+X 剪切,Ctrl+Z 撤销,Ctrl+A 全选。 -7. **答案:A** - - **解析:** 移动 = 剪切 + 粘贴。原位置文件消失,新位置出现。复制 = 复制 + 粘贴,原文件保留。 -8. **答案:B** - - **解析:** 计算机存储单位换算率为 1024。$1 \text{GB} = 1024 \text{MB}$,所以 $2 \text{GB} = 2 \times 1024 = 2048 \text{MB}$。 -9. **答案:B** - - **解析:** 这是一个重要的操作常识。直接 Delete 会放入回收站(可后悔);Shift + Delete 是物理删除(不进回收站,难以恢复)。 -10. **答案:B** - - **解析:** 操作系统的位数取决于 CPU 的指令集架构和寻址能力。64位指 CPU 一次能处理 64 位二进制数据。 -11. **答案:B** - - **解析:** 文件系统的目录结构是从根目录开始,逐级向下分支,这是一种典型的“树形结构”。 -12. **答案:B** - - **解析:** 重要考点。Windows 文件系统通常不区分大小写。Linux 文件系统(Ext4等)严格区分大小写,所以 Test.cpp 和 test.cpp 是两个不同的文件。 -13. **答案:A** - - **解析:** iOS 是苹果公司的移动操作系统。MS-DOS 是早期的命令行系统;RedHat 是服务器版 Linux;Windows Server 是服务器系统。 -14. **答案:B** - - **解析:** “只读”属性意味着可以读取(Read)内容,但不能写入(Write/Modify)保存。 -15. **答案:B** - - **解析:** 单核 CPU 在同一时刻只能执行一条指令。多任务处理是通过操作系统的调度,让 CPU 在不同程序间快速切换(分时),让人感觉是同时运行。 -16. **答案:A** - - **解析:** Alt + Tab 是标准的切换窗口快捷键。Win + D 是显示桌面;Ctrl + Alt + Del 通常用于打开任务管理器或安全界面。 -17. **答案:B** - - **解析:** 驱动程序(Driver)是硬件厂商提供的,让操作系统能够控制和使用该硬件的接口程序。没有驱动,操作系统无法识别或控制硬件。 -18. **答案:C** - - **解析:** 剪贴板是内存(RAM)中的一块区域,用于临时存放交换的数据。如果电脑断电或重启,剪贴板中的内容通常会丢失。 -19. **答案:B** - - **解析:** 操作系统的五大基本功能包括:处理器管理、存储器管理、设备管理、文件管理和作业管理。编写源代码是程序员的工作,使用的是编辑器或IDE,不属于操作系统的内核功能。 -20. **答案:B** - - **解析:** GUI(Graphical User Interface)指图形用户界面,Windows 是典型的 GUI 操作系统。MS-DOS 和 Unix Shell 主要是 CLI(命令行界面)。 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/3.NOI CSP-J 初赛:计算机网络与Internet的基本概念.md b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/3.NOI CSP-J 初赛:计算机网络与Internet的基本概念.md deleted file mode 100644 index d50464f..0000000 --- a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/3.NOI CSP-J 初赛:计算机网络与Internet的基本概念.md +++ /dev/null @@ -1,190 +0,0 @@ -# NOI CSP-J 初赛专项模拟题:计算机网络与Internet的基本概念 - -## 单项选择题 - -1. **计算机网络最突出的优势是( )。** -A. 提高计算机的运算速度 -B. 实现资源共享和信息传递 -C. 提高计算机的存储容量 -D. 增加计算机的稳定性 -2. **按照网络的覆盖范围,可以将计算机网络分为局域网(LAN)、城域网(MAN)和广域网(WAN)。下列关于这三者的描述,正确的是( )。** -A. 覆盖范围:LAN > MAN > WAN -B. 传输速率:WAN 通常高于 LAN -C. Internet 是世界上最大的广域网 -D. 学校机房的网络通常属于城域网 -3. **在计算机网络拓扑结构中,若中央节点发生故障将导致整个网络瘫痪,这种结构是( )。** -A. 总线型 -B. 环型 -C. 星型 -D. 网状型 -4. **目前互联网广泛使用的 TCP/IP 协议中,IP 地址(IPv4)是由( )位二进制数组成的。** -A. 16 -B. 32 -C. 64 -D. 128 -5. **下列 IP 地址中,格式正确的是( )。** -A. 192.168.1 -B. 202.102.300.1 -C. 10.0.0.1 -D. 172.16.256.1 -6. **为了解决 IPv4 地址枯竭的问题,新一代互联网协议 IPv6 应运而生。IPv6 采用的地址长度是( )。** -A. 64位 -B. 128位 -C. 256位 -D. 512位 -7. **在 Internet 上,用于将域名(如 [www.noi.cn](https://www.roi.com))转换为对应的 IP 地址(如 202.10.1.1)的服务系统是( )。** -A. URL -B. DNS -C. FTP -D. HTTP -8. **下列关于域名的说法中,错误的是( )。** -A. 域名是 IP 地址的字符形式,便于人们记忆 -B. 域名中的 .com 通常代表商业机构,.edu 代表教育机构 -C. 域名具有层次结构,顶级域名在最右侧 -D. 一个 IP 地址只能对应一个域名,一个域名也只能对应一个 IP 地址 -9. **统一资源定位符(URL)用于标识互联网上的资源位置。在 URL `http://www.example.com/index.html` 中,`http` 代表的是( )。** -A. 主机名 -B. 协议名 -C. 路径 -D. 文件名 -10. **电子邮件(E-mail)是互联网最基本的服务之一。下列电子邮件地址格式正确的是( )。** -A. https://www.google.com/search?q=user.gmail.com -B. user#gmail.com -C. user@gmail.com -D. [www.user.gmail.com](https://www.google.com/search?q=https://www.user.gmail.com) -11. **在电子邮件收发过程中,通常用于发送邮件的协议是( ),用于接收邮件的协议是( )。** -A. POP3; SMTP -B. SMTP; POP3 -C. HTTP; FTP -D. TCP; IP -12. **超文本标记语言的英文缩写是( ),它是制作网页的基础。** -A. HTTP -B. HTML -C. URL -D. WWW -13. **下列 IP 地址中,属于“C类”地址且通常用于局域网内部(私有地址)的是( )。** -A. 10.0.0.1 -B. 172.16.1.1 -C. 192.168.1.100 -D. 127.0.0.1 -14. **Internet 提供的服务多种多样,其中 FTP 服务主要用于( )。** -A. 远程登录 -B. 网页浏览 -C. 文件传输 -D. 电子公告板 -15. **远程登录允许用户通过网络控制远程计算机,就像坐在该计算机面前一样。远程登录使用的标准协议是( )。** -A. Telnet -B. FTP -C. SMTP -D. UDP -16. **网页浏览器(Browser)是用户访问万维网的工具。下列软件中不属于浏览器的是( )。** -A. Google Chrome -B. Microsoft Edge -C. Mozilla Firefox -D. Apache HTTP Server -17. **在 TCP/IP 协议簇中,ping 命令常用于测试网络的连通性。它利用的是( )协议。** -A. TCP -B. ICMP -C. UDP -D. ARP -18. **关于万维网(WWW),下列说法错误的是( )。** -A. WWW 是 World Wide Web 的缩写 -B. WWW 信息资源主要以网页形式呈现 -C. WWW 就是互联网(Internet)的代名词 -D. WWW 使用 HTTP 协议传输数据 -19. **在一个局域网中,多台计算机需要通过一条电话线或光纤接入 Internet,通常需要一个设备来进行网络地址转换(NAT)和路由转发,这个设备是( )。** -A. 交换机 (Switch) -B. 路由器 (Router) -C. 集线器 (Hub) -D. 网卡 (NIC) -20. **IP 地址 127.0.0.1 是一个特殊的地址,它通常被称为( )。** -A. 广播地址 -B. 网络地址 -C. 回环地址(Localhost) -D. 网关地址 - ---- - -## 二、答案与解析 - -1. **答案:B** -* **解析:** 计算机网络的主要目的是实现硬件、软件和数据资源的共享以及用户之间的信息传递。 - - -2. **答案:C** -* **解析:** A项中 WAN 的覆盖范围最大;B项中通常局域网(LAN)的传输速率高于广域网(WAN),因为距离短、介质好;D项学校机房通常是局域网(LAN),整个城市的网络才可能是城域网(MAN)。Internet 是全球最大的广域网。 - - -3. **答案:C** -* **解析:** 星型拓扑结构由一个中心节点(如交换机)和若干外围节点组成,所有数据都需经过中心节点。如果中心节点故障,全网瘫痪。总线型和环型某处断开可能会影响部分或全部,但星型对中心节点的依赖最强。 - - -4. **答案:B** -* **解析:** IPv4 地址由 32 位二进制数组成,通常用点分十进制表示(如 192.168.1.1)。IPv6 是 128 位。 - - -5. **答案:C** -* **解析:** IP 地址由 4 段数字组成,每段范围是 0-255。A项只有3段;B项 300 超出了 255;D项 256 超出了 255。C项 10.0.0.1 合法。 - - -6. **答案:B** -* **解析:** IPv6(Internet Protocol Version 6)采用 128 位地址长度,号称可以为地球上的每一粒沙子分配一个 IP 地址。 - - -7. **答案:B** -* **解析:** DNS(Domain Name System,域名系统)的作用就是建立域名和 IP 地址之间的映射关系,方便用户访问。 - - -8. **答案:D** -* **解析:** 域名和 IP 地址并不是严格的一一对应关系。一台服务器(一个 IP)可以托管多个域名;大型网站(一个域名)也可以对应多个 IP(负载均衡)。 - - -9. **答案:B** -* **解析:** URL 格式为 `协议://主机名/路径/文件名`。这里 `http` 是超文本传输协议。 - - -10. **答案:C** -* **解析:** 电子邮件的标准格式是 `用户名@主机域名`。 - - -11. **答案:B** -* **解析:** 发信通常使用 SMTP(简单邮件传输协议);收信通常使用 POP3(邮局协议第3版)或 IMAP。 - - -12. **答案:B** -* **解析:** HTML(HyperText Markup Language)是超文本标记语言。HTTP 是传输协议;URL 是地址;WWW 是万维网服务。 - - -13. **答案:C** -* **解析:** * A类私有地址:10.0.0.0 - 10.255.255.255 -* B类私有地址:172.16.0.0 - 172.31.255.255 -* C类私有地址:192.168.0.0 - 192.168.255.255 -* C 选项 192.168.1.100 是典型的 C 类私有地址。 - - -14. **答案:C** -* **解析:** FTP(File Transfer Protocol)是文件传输协议,用于在网络上传输文件。 - - -15. **答案:A** -* **解析:** Telnet 是 Internet 远程登录服务的标准协议。 - - -16. **答案:D** -* **解析:** Apache HTTP Server 是一种 Web 服务器软件,用于提供网页服务,而不是用户用来浏览网页的客户端浏览器。Chrome、Edge、Firefox 都是浏览器。 - - -17. **答案:B** -* **解析:** ping 命令基于 ICMP(Internet Control Message Protocol,互联网控制报文协议)工作,用于检测目标主机是否可达。 - - -18. **答案:C** -* **解析:** WWW(万维网)只是运行在 Internet 上的一种服务(应用层),Internet 还包括 E-mail、FTP、Telnet 等其他服务,两者不能等同。 - - -19. **答案:B** -* **解析:** 路由器(Router)的主要功能是连接不同的网络(如局域网和互联网),并进行数据包的路由转发和地址转换(NAT)。 - - -20. **答案:C** -* **解析:** 127.0.0.1 是回环地址(Loopback Address),代表计算机本身,常用于本机测试。 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/4.NOI CSP-J 初赛:计算机历史、应用与NOI活动.md b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/4.NOI CSP-J 初赛:计算机历史、应用与NOI活动.md deleted file mode 100644 index 1cc5881..0000000 --- a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/4.NOI CSP-J 初赛:计算机历史、应用与NOI活动.md +++ /dev/null @@ -1,151 +0,0 @@ -# NOI CSP-J 初赛专项模拟题:计算机历史、应用与NOI活动 - -## 一、单项选择题 - -1. **世界上第一台通用电子数字计算机 ENIAC 诞生于( )。** -A. 1936年 -B. 1946年 -C. 1956年 -D. 1964年 -2. **被后人誉为“计算机之父”,提出了“存储程序”概念的科学家是( )。** -A. 艾伦·图灵 (Alan Turing) -B. 冯·诺依曼 (John von Neumann) -C. 克劳德·香农 (Claude Shannon) -D. 查尔斯·巴贝奇 (Charles Babbage) -3. **计算机的发展经历了四个时代,划分这四个时代的主要依据是( )。** -A. 计算机的运算速度 -B. 计算机的物理体积 -C. 构成计算机的逻辑元件(电子器件) -D. 计算机的编程语言 -4. **著名的“摩尔定律”(Moore's Law)指出,集成电路芯片上所集成的晶体管数目,大约每隔( )个月就翻一番。** -A. 6 -B. 12 -C. 18 -D. 36 -5. **中国计算机学会(CCF)于( )年创办了全国青少年信息学奥林匹克竞赛(NOI)。** -A. 1980 -B. 1984 -C. 1989 -D. 1995 -6. **在计算机应用领域中,CAD 的中文含义是( )。** -A. 计算机辅助教学 -B. 计算机辅助设计 -C. 计算机辅助制造 -D. 计算机辅助测试 -7. **被认为是世界上第一位程序员的女性科学家是( )。** -A. 葛丽丝·霍普 (Grace Hopper) -B. 埃达·洛夫莱斯 (Ada Lovelace) -C. 玛格丽特·汉密尔顿 (Margaret Hamilton) -D. 希拉里·梅森 (Hilary Mason) -8. **1984年,邓小平同志在上海观看小学生操作计算机程序演示后,提出了( )的著名论断,极大地推动了中国计算机教育的发展。** -A. 计算机要从娃娃抓起 -B. 科学技术是第一生产力 -C. 普及计算机教育 -D. 学习编程,面向未来 -9. **目前,NOI 系列活动(包括 CSP-J/S, NOIP, NOI 等)中,官方支持的唯一的程序设计语言是( )。** -A. C -B. Pascal -C. Python -D. C++ -10. **IOI 是国际信息学奥林匹克竞赛的缩写,第一届 IOI 于 1989 年在( )举行。** -A. 中国北京 -B. 美国华盛顿 -C. 保加利亚布拉维茨 -D. 希腊雅典 -11. **图灵奖(Turing Award)被誉为“计算机界的诺贝尔奖”,它是由( )设立的。** -A. IEEE(电气电子工程师学会) -B. ACM(美国计算机协会) -C. Intel 公司 -D. 诺贝尔基金会 -12. **第二代电子计算机使用的主要逻辑元件是( )。** -A. 电子管 -B. 晶体管 -C. 集成电路 -D. 大规模集成电路 -13. **关于 CSP-J/S,下列说法正确的是( )。** -A. 它是一项专业级别的程序员资格认证 -B. 它的全称是“计算机软件能力认证” -C. 它分为 J 组(入门级)和 S 组(提高级)两个组别 -D. 只有高中生才能参加 S 组 -14. **人工智能(AI)是当前计算机应用的热点之一。最早提出判断机器是否具有智能的测试方法,被称为( )。** -A. 冯·诺依曼测试 -B. 摩尔测试 -C. 图灵测试 -D. 香农测试 -15. **中国自主研发的超级计算机在世界范围内享有盛誉,其中曾多次蝉联世界最快超级计算机榜首的是( )系列。** -A. 银河 -B. 曙光 -C. 也就是 -D. 神威·太湖之光 -16. **NOI 系列活动的主办单位是( )。** -A. 教育部 -B. 中国科协 -C. 中国计算机学会 (CCF) -D. 清华大学 - ---- - -## 二、答案与详细解析 - -1. **答案:B** -* **解析:** 世界上第一台通用电子数字计算机 ENIAC(埃尼阿克)于 1946 年在美国宾夕法尼亚大学诞生。 - - -2. **答案:B** -* **解析:** 冯·诺依曼(John von Neumann)提出了“存储程序”原理和二进制思想,确立了现代计算机的基本结构,被称为“现代计算机之父”。艾伦·图灵被称为“计算机科学之父”和“人工智能之父”。 - - -3. **答案:C** -* **解析:** 计算机发展的四个时代是根据物理器件(逻辑元件)来划分的:第一代(电子管)、第二代(晶体管)、第三代(中小规模集成电路)、第四代(大规模和超大规模集成电路)。 - - -4. **答案:C** -* **解析:** 戈登·摩尔提出的摩尔定律指出,集成电路上可容纳的晶体管数目,约每隔 18-24 个月便会增加一倍,性能也将提升一倍。选项中 18 最为准确。 - - -5. **答案:B** -* **解析:** 1984 年,中国计算机学会(CCF)创办了首届全国青少年信息学奥林匹克竞赛(NOI)。 - - -6. **答案:B** -* **解析:** CAD (Computer Aided Design) 是计算机辅助设计;CAM 是计算机辅助制造;CAI 是计算机辅助教学。 - - -7. **答案:B** -* **解析:** 埃达·洛夫莱斯(Ada Lovelace),拜伦之女,她为巴贝奇的分析机编写了算法,被公认为世界上第一位程序员。 - - -8. **答案:A** -* **解析:** 1984 年 2 月 16 日,邓小平在上海观看小学生演示后说:“计算机的普及要从娃娃抓起。”这句话成为了中国计算机教育发展的指导方针。 - - -9. **答案:D** -* **解析:** 根据 CCF 的规定,自 2022 年起,NOI 系列活动(包括 CSP-J/S)不再支持 Pascal 和 C 语言,C++ 成为唯一的比赛语言。 - - -10. **答案:C** -* **解析:** 第一届国际信息学奥林匹克竞赛(IOI)于 1989 年在保加利亚的布拉维茨举行。 - - -11. **答案:B** -* **解析:** 图灵奖由美国计算机协会(ACM)设立,以表彰在计算机科学领域做出杰出贡献的科学家,是计算机界的最高荣誉。 - - -12. **答案:B** -* **解析:** 第一代是电子管;第二代是晶体管;第三代是集成电路;第四代是大规模集成电路。 - - -13. **答案:C** -* **解析:** CSP-J/S 是 CCF 组织的“非专业级软件能力认证”(Certified Software Professional - Junior/Senior)。A 错误,它是非专业的;B 错误,全称应包含“非专业级”;D 错误,中小学生均可参加任一组别,不限年级。 - - -14. **答案:C** -* **解析:** 艾伦·图灵在 1950 年提出了“图灵测试”,如果在测试中,人类测试者无法区分对话的是机器还是人,则认为机器具有智能。 - - -15. **答案:D** -* **解析:** “神威·太湖之光”曾多次位居全球超级计算机 TOP500 榜首,展示了中国在超算领域的强大实力。“天河”系列也曾夺冠。 - - -16. **答案:C** -* **解析:** 全国青少年信息学奥林匹克竞赛(NOI)及 CSP-J/S 认证的主办单位均是中国计算机学会(CCF)。 diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/5.NOI CSP-J 初赛:计算机编码基础.md b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/5.NOI CSP-J 初赛:计算机编码基础.md deleted file mode 100644 index 790c5d1..0000000 --- a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/5.NOI CSP-J 初赛:计算机编码基础.md +++ /dev/null @@ -1,97 +0,0 @@ -# NOI CSP-J 初赛专项模拟题:计算机编码基础 - -## 一、单项选择题 - -1. **在计算机系统中,能被计算机接受和处理的符号的集合被称为( )。** -A. 编码 -B. 数据 -C. 信息 -D. 比特 -2. **计算机中表示信息的数据编码中的最小单位是( )。** -A. 字节 (Byte) -B. 比特 (Bit) -C. 字 (Word) -D. 字符 (Character) -3. **关于“字节”(Byte)的描述,根据所给资料,下列说法错误的是( )。** -A. 字节表示被处理的一组连续的二进制数字 -B. 通常用 8 位二进制数字表示一个字节 -C. 字节是存储器系统的最小存取单位 -D. 一个字节由 7 个比特组成 -4. **将各类符号、图形、图像和声音等非数值数据转换成计算机能识别的“0”和“1”表示的代码,这一过程称为( )。** -A. 运算 -B. 存储 -C. 编码 -D. 交互 -5. **ASCII 码的全称是( )。** -A. 国际信息交换标准代码 -B. 美国国家信息交换标准代码 -C. 欧洲计算机制造商协会代码 -D. 通用多八位编码字符集 -6. **标准的 ASCII 码采用( )位二进制编码,能表示( )种字符。** -A. 7; 128 -B. 8; 256 -C. 7; 256 -D. 8; 128 -7. **在 ASCII 码的存储中,虽然标准 ASCII 码只有 7 位,但它存储时通常占全一个字节(8位)。在基本的 ASCII 码中,最高位(b7)的值恒为( )。** -A. 1 -B. 0 -C. 随机 -D. 与 b6 相同 -8. **根据资料,ASCII 编码中数字“0”的十六进制值为 30H。那么数字“5”的 ASCII 码十六进制值是( )。** -A. 35H -B. 36H -C. 45H -D. 50H -9. **已知大写字母“A”的 ASCII 编码值为 41H,那么大写字母“D”的 ASCII 编码值是( )。** -A. 42H -B. 43H -C. 44H -D. 45H -10. **小写字母“a”的 ASCII 编码值为 61H,大写字母“A”的 ASCII 编码值为 41H。它们之间的差值是( )。** -A. 10H -B. 20H -C. 30H -D. 32H - ---- - -## 二、答案与详细解析 - -1. **答案:B** -* **解析:** “数据”的定义就是能被计算机接受和处理的符号的集合。计算机处理的对象就是数据。 - - -2. **答案:B** -* **解析:** 比特(Bit,Binary Digit)是二进制数位,是计算机表示信息的数据编码中的**最小单位**,只能是 0 或 1。 - - -3. **答案:D** -* **解析:** 字节(Byte)是计算机存储的基本单位,通常由 **8** 个比特(bit)组成,而不是 7 个。 - - -4. **答案:C** -* **解析:** 编码就是将各类现实世界的信息(如符号、图像、声音)转换成计算机能够识别的二进制代码(0 和 1)的过程。 - - -5. **答案:B** -* **解析:** ASCII 是 **A**merican **S**tandard **C**ode for **I**nformation **I**nterchange 的缩写,意为美国国家信息交换标准代码。 - - -6. **答案:A** -* **解析:** 标准的 ASCII 码使用 **7** 位二进制数来表示字符,因此它可以表示的状态(字符)总数为 种。 - - -7. **答案:B** -* **解析:** ASCII 码占用一个字节(8位)进行存储,但标准 ASCII 码只用了低 7 位,最高位(第 8 位,b7)通常被置为 **0**。 - - -8. **答案:A** -* **解析:** ASCII 码中数字字符是连续排列的。已知 '0' 的十六进制是 30H,'5' 在 '0' 后面第 5 个位置,所以 。 - - -9. **答案:C** -* **解析:** 英文字母在 ASCII 表中也是按字母表顺序连续排列的。'A' 是 41H,'D' 是 'A' 后的第三个字母(A, B, C, D),所以 'D' = 。 - - -10. **答案:B** -* **解析:** 小写字母 'a' (61H) 比大写字母 'A' (41H) 的 ASCII 值大。计算差值:。所有对应的大小写字母之间都相差 20H(即十进制的 32)。 diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/6.NOI CSP-J 初赛:程序基本语句.md b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/6.NOI CSP-J 初赛:程序基本语句.md deleted file mode 100644 index 7c9ae03..0000000 --- a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/6.NOI CSP-J 初赛:程序基本语句.md +++ /dev/null @@ -1,399 +0,0 @@ -# NOI CSP-J 初赛专项模拟题:程序基本语句 - -## 阅读程序 (程序输入不超过数组或字符串定义的范围,判断题正确填√,错误填×) - -### (1) - -```cpp -01 #include -02 using namespace std; -03 -04 int main() { -05 int x, y; -06 cin >> x >> y; -07 int ans = 1; -08 for (int i = 1; i <= y; i++) { -09 ans = ans * x; -10 ans = ans % 10; -11 } -12 cout << ans << endl; -13 return 0; -14 } -``` - -假设输入的 `x`, `y` 均为不超过 100 的正整数,完成下面的判断题和单选题: - -**判断题** - -1. 该程序的功能是计算 的值。( ) -2. 程序的输出结果一定是一个小于 10 的整数。( ) -3. 当输入为“2 3”时,输出为“8”。( ) - -**单选题** -4. 当输入为“12 2”时,输出为( )。 -A. 2 B. 4 C. 24 D. 144 -5. 当输入为“2 10”时,输出为( )。 -A. 2 B. 4 C. 6 D. 8 - ---- - -### (2) - -```cpp -01 #include -02 using namespace std; -03 -04 int main() { -05 int n; -06 cin >> n; -07 int a[105]; -08 for(int i = 1; i <= n; i++) { -09 cin >> a[i]; -10 } -11 int count = 0; -12 for(int i = 1; i <= n; i++) { -13 if(a[i] > 0 && a[i] % 2 == 0) { -14 count = count + a[i]; -15 } -16 } -17 cout << count << endl; -18 return 0; -19 } - -``` - -假设输入的 `n` 为不超过 100 的正整数,数组元素均为 `int` 范围内整数,完成下面的判断题和单选题: - -**判断题** -6. 该程序统计的是数组中所有偶数的个数。( ) -7. 如果数组中所有的数都是负数,输出结果为 0。( ) -8. 第 13 行的 `a[i] > 0` 条件如果去掉,程序的输出结果对于任何输入都不会改变。( ) - -**单选题** -9. 当输入 `n=5`,数组元素为 `1 2 3 4 5` 时,输出为( )。 -A. 2 B. 3 C. 6 D. 9 -10. 当输入 `n=5`,数组元素为 `-2 -4 2 4 6` 时,输出为( )。 -A. 12 B. 6 C. 0 D. -6 - ---- - -### (3) - -```cpp -01 #include -02 #include -03 using namespace std; -04 -05 int main() { -06 string s; -07 cin >> s; -08 int len = s.length(); -09 for (int i = 0; i < len; i++) { -10 if (s[i] >= 'a' && s[i] <= 'z') { -11 s[i] = s[i] - 32; -12 } else if (s[i] >= 'A' && s[i] <= 'Z') { -13 s[i] = s[i] + 32; -14 } -15 } -16 cout << s << endl; -17 return 0; -18 } - -``` - -假设输入仅包含英文字母,完成下面的判断题和单选题: - -**判断题** -11. 程序执行后,字符串 `s` 的长度可能会发生改变。( ) -12. 输入 "CSP" 时,输出 "csp"。( ) -13. 该程序实现了大小写字母互换的功能。( ) - -**单选题** -14. 当输入 "Hello" 时,输出为( )。 -A. hello B. HELLO C. hELLO D. Hello -15. 已知 'a' 的 ASCII 码是 97,'A' 的 ASCII 码是 65,则第 11 行可以改为 `s[i] = s[i] - 'a' + 'A'`,效果不变。该说法( )。 -A. 正确 B. 错误 C. 编译错误 D. 运行时错误 - -**(4)** - -```cpp -01 #include -02 using namespace std; -03 -04 int f(int n) { -05 if (n <= 1) return 1; -06 if (n % 2 == 0) -07 return f(n / 2) + n; -08 else -09 return f(n - 1) + 1; -10 } -11 -12 int main() { -13 int x; -14 cin >> x; -15 cout << f(x) << endl; -16 return 0; -17 } - -``` - -假设输入的 x 为不超过 1000 的正整数,完成下面的判断题和单选题: - -**判断题** - -1. 当输入 x 为偶数时,函数 `f(x)` 只会进行递归调用,不会增加数值。( ) -2. 该函数一定会终止,不会出现死循环。( ) -3. 当输入 5 时,输出结果为 6。( ) - -**单选题** -4. 当输入 8 时,输出为( )。 -A. 13 B. 14 C. 15 D. 16 -5. 当输入 10 时,函数 `f` 被调用的次数(包括 `main` 中的第一次调用)是( )。 -A. 4 B. 5 C. 6 D. 7 - -**(5)** - -```cpp -01 #include -02 using namespace std; -03 -04 int main() { -05 int n, m; -06 cin >> n >> m; -07 int a[20][20]; -08 for (int i = 0; i < n; i++) { -09 for (int j = 0; j < m; j++) { -10 if (i == 0 || j == 0) -11 a[i][j] = 1; -12 else -13 a[i][j] = a[i - 1][j] + a[i][j - 1]; -14 } -15 } -16 cout << a[n - 1][m - 1] << endl; -17 return 0; -18 } - -``` - -假设输入的 n, m 均为不超过 15 的正整数,完成下面的判断题和单选题: - -**判断题** - -1. 该程序计算的是组合数学中杨辉三角或类似路径计数的问题。( ) -2. 如果输入 n=1, m=5,输出结果为 5。( ) -3. 无论输入什么正整数,数组 `a` 中的值都会随 `i` 和 `j` 的增大而单调递增(不考虑边界)。( ) - -**单选题** -4. 当输入 3 3 时,输出为( )。 -A. 4 B. 5 C. 6 D. 10 -5. 该程序模拟的计算过程等价于求解从网格左上角 (0,0) 走到右下角 (n-1, m-1) 的路径数,且每次只能向右或向下走。如果输入 4 3,输出结果为( )。 -A. 6 B. 10 C. 15 D. 20 - - ---- - -## 三、完善程序 (单选题) - -### (1) 判断回文数 - -读入一个正整数 `n`,判断它是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都一样的整数,例如 121 是回文数,而 123 不是。 - -```cpp -01 #include -02 using namespace std; -03 -04 int main() { -05 int n, t, y = 0; -06 cin >> n; -07 t = ①; -08 while (t > 0) { -09 y = y * 10 + ②; -10 t = ③; -11 } -12 if (④) -13 cout << "Yes" << endl; -14 else -15 cout << "No" << endl; -16 return 0; -17 } - -``` - -16. ①处应填( ) -A. 0 B. 1 C. n D. -1 -17. ②处应填( ) -A. t / 10 B. t % 10 C. n % 10 D. n / 10 -18. ③处应填( ) -A. t / 10 B. t % 10 C. t - 1 D. t + 1 -19. ④处应填( ) -A. n == t B. n == 0 C. n == y D. y == t -20. 如果输入的 `n` 是 `100`,循环结束后 `y` 的值是( ) -A. 1 B. 0 C. 001 D. 10 - -### (2) 最大公约数与最小公倍数 - -输入两个正整数 `m` 和 `n`,求它们的最大公约数 (GCD) 和最小公倍数 (LCM)。程序使用辗转相除法(欧几里得算法)的迭代实现。 - -```cpp -01 #include -02 using namespace std; -03 -04 int main() { -05 int m, n, a, b, r; -06 cin >> m >> n; -07 a = m; -08 b = n; -09 while (①) { -10 r = m % n; -11 m = ②; -12 n = ③; -13 } -14 cout << "GCD: " << ④ << endl; -15 cout << "LCM: " << ⑤ << endl; -16 return 0; -17 } - -``` - -21. ①处应填( ) - A. m != 0 B. n != 0 C. r != 0 D. m % n == 0 -22. ②处应填( ) - A. n B. r C. a D. b -23. ③处应填( ) - A. m B. r C. a D. b -24. ④处应填( ) - A. n B. r C. m D. a -25. ⑤处应填( ) - A. a * b / m B. a * b / n C. a * b / r D. m * n / a - ---- - -**(3) 高精度加法** -输入两个正整数(可能非常大,超过 `long long` 范围),输出它们的和。 -程序使用字符串读取输入,然后转化为数组进行逐位计算。 - -```cpp -01 #include -02 #include -03 #include -04 using namespace std; -05 -06 int a[505], b[505], c[505]; -07 -08 int main() { -09 string s1, s2; -10 cin >> s1 >> s2; -11 int len1 = s1.length(); -12 int len2 = s2.length(); -13 -14 for (int i = 0; i < len1; i++) a[len1 - 1 - i] = ①; -15 for (int i = 0; i < len2; i++) b[len2 - 1 - i] = s2[i] - '0'; -16 -17 int len = len1 > len2 ? len1 : len2; -18 for (int i = 0; i < len; i++) { -19 c[i] += a[i] + b[i]; -20 c[i + 1] = ②; -21 c[i] = ③; -22 } -23 -24 if (④) len++; -25 -26 for (int i = len - 1; i >= 0; i--) { -27 cout << ⑤; -28 } -29 cout << endl; -30 return 0; -31 } - -``` - -26. ①处应填( ) -A. `s1[i]` B. `s1[i] - '0'` C. `s1[len1 - 1 - i]` D. `s1[len1 - 1 - i] - '0'` -27. ②处应填( ) -A. `c[i] % 10` B. `c[i] / 10` C. `c[i+1] + c[i] / 10` D. `a[i] + b[i]` -28. ③处应填( ) -A. `c[i] / 10` B. `c[i] % 10` C. `a[i] % 10` D. `b[i] % 10` -29. ④处应填( ) -A. `c[len] > 0` B. `c[len] >= 10` C. `c[len-1] > 0` D. `c[len] != 0` -30. ⑤处应填( ) -A. `c[i]` B. `c[len - i]` C. `a[i] + b[i]` D. `c[i] + '0'` - -# 答案与解析 - -## 阅读程序 - -### (1) - -1. **×** -**解析:** 程序在循环中每次将 `ans` 乘以 `x` 后立即对 10 取模,因此它计算的是 的**个位数字**,而不是 的值。 -2. **√** -**解析:** 由于每次运算都执行 `% 10`,结果 `ans` 必定在 0 到 9 之间。 -3. **√** -**解析:** 输入 2 3,循环执行 3 次。 -``` -i=1: ans = 1*2%10 = 2 -i=2: ans = 2*2%10 = 4 -i=3: ans = 4*2%10 = 8 -输出 8。 -``` -4. **B** -**解析:** 输入 12 2。 -``` -i=1: ans = 1*12%10 = 12%10 = 2 -i=2: ans = 2*12%10 = 24%10 = 4 -输出 4。 -``` -5. **B** -**解析:** 输入 2 10,计算 的个位数。 规律为 2,4,8,6 循环。10 % 4 = 2,所以是第 2 个,即 4。 - -### (2) - -6. **×** -**解析:** 变量 `count` 累加的是 `a[i]` 的值(`count = count + a[i]`),而不是个数。它计算的是**大于0的偶数之和**。 -7. **√** -**解析:** 如果全是负数,`a[i] > 0` 条件始终不满足,`count` 保持初始值 0。 -8. **×** -**解析:** 如果去掉 `a[i] > 0`,负偶数也会被加进去,结果会改变。例如输入 -2,原程序加 0,去掉条件后加 -2。 -9. **C** -**解析:** 数组 1 2 3 4 5 中,大于0的偶数有 2, 4。和为 2+4=6。 -10. **A** -**解析:** 数组 -2 -4 2 4 6 中,大于0的偶数有 2, 4, 6。和为 2+4+6=12。 - -### (3) - -11. **×** -**解析:** 程序只是修改字符的值(ASCII码变换),不涉及插入或删除,长度不变。 -12. **√** -**解析:** C, S, P 都是大写,满足第二个 `if`,加 32 变为小写 c, s, p。 -13. **√** -**解析:** 第一个 `if` 将小写转大写(-32),第二个 `if` 将大写转小写(+32)。 -14. **C** -**解析:** "Hello"。'H' 是大写 -> 'h'。'e','l','l','o' 是小写 -> 'E','L','L','O'。输出 "hELLO"。 -15. **A** -**解析:** `s[i] - 32` 等价于 `s[i] - ('a' - 'A')`,即 `s[i] - 'a' + 'A'`。这是标准的转换方式。 - -## 完善程序 - -### (1) 判断回文数 - -* **算法思路:** 将数字 `n` 翻转生成新数字 `y`,比较 `n` 和 `y` 是否相等。 -* **解析:** -16. **C (n)**:需要用一个临时变量 `t` 来操作,保留原数 `n` 用于最后比较,所以 `t` 初始化为 `n`。 -17. **B (t % 10)**:取出 `t` 的最后一位数字。 -18. **A (t / 10)**:去掉 `t` 的最后一位数字,以便下一次循环取下一位。 -19. **C (n == y)**:比较原数 `n` 和翻转后的数 `y`。 -20. **A (1)**:`n=100`。 -第一次:`y=0+0=0`, `t=10` -第二次:`y=0+0=0`, `t=1` -第三次:`y=0+1=1`, `t=0` -循环结束,`y` 为 1。 - -### (2) 最大公约数与最小公倍数 - -* **算法思路:** 欧几里得算法:`gcd(m, n) = gcd(n, m % n)`,直到 `n` 为 0,此时 `m` 即为 GCD。LCM = (a * b) / GCD。 -* **解析:** -21. **B (n != 0)**:循环继续的条件是除数不为 0。 -22. **A (n)**:将原来的除数 `n` 赋值给被除数 `m`。 -23. **B (r)**:将余数 `r` 赋值给除数 `n`。 -24. **C (m)**:循环结束时 `n` 为 0,`m` 存储的是最大公约数。 -25. **A (a * b / m)**:最小公倍数 = 两数之积 / 最大公约数。注意原数保存在 `a` 和 `b` 中,`m` 是计算出的 GCD。 \ No newline at end of file diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/1.计算机的基本构成.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/1.计算机的基本构成.docx deleted file mode 100644 index 32a979a..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/1.计算机的基本构成.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/10.基本运算.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/10.基本运算.docx deleted file mode 100644 index 0d3ad3d..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/10.基本运算.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/11.字符串处理.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/11.字符串处理.docx deleted file mode 100644 index 711761b..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/11.字符串处理.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/12.函数与递归.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/12.函数与递归.docx deleted file mode 100644 index 708fc82..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/12.函数与递归.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/13.线性表.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/13.线性表.docx deleted file mode 100644 index 043b458..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/13.线性表.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/14.树.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/14.树.docx deleted file mode 100644 index fb6ed55..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/14.树.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/15.图与哈希表.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/15.图与哈希表.docx deleted file mode 100644 index 151f14c..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/15.图与哈希表.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/16.入门算法.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/16.入门算法.docx deleted file mode 100644 index 3ce12f1..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/16.入门算法.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/17.基础算法.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/17.基础算法.docx deleted file mode 100644 index 7c8a95f..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/17.基础算法.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/18.排序算法.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/18.排序算法.docx deleted file mode 100644 index 7326b86..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/18.排序算法.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/19.图论算法.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/19.图论算法.docx deleted file mode 100644 index 58e7db3..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/19.图论算法.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/2.操作系统的基本概念及其常见操作.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/2.操作系统的基本概念及其常见操作.docx deleted file mode 100644 index 1d2359f..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/2.操作系统的基本概念及其常见操作.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/20.动态规划.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/20.动态规划.docx deleted file mode 100644 index eff292c..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/20.动态规划.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/21.数及其运算.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/21.数及其运算.docx deleted file mode 100644 index 032e7a8..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/21.数及其运算.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/22.进制的基本概念与进制转换.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/22.进制的基本概念与进制转换.docx deleted file mode 100644 index 6e24e48..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/22.进制的基本概念与进制转换.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/23.初中数学与逻辑推理.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/23.初中数学与逻辑推理.docx deleted file mode 100644 index 7880d5f..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/23.初中数学与逻辑推理.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/24.初等数论.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/24.初等数论.docx deleted file mode 100644 index 79253a5..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/24.初等数论.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/25.组合数学.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/25.组合数学.docx deleted file mode 100644 index 04c70d8..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/25.组合数学.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/26.复杂度分析.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/26.复杂度分析.docx deleted file mode 100644 index 7fa9631..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/26.复杂度分析.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/27.其它.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/27.其它.docx deleted file mode 100644 index a50e280..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/27.其它.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/3.计算机网络与Internet的基本概念.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/3.计算机网络与Internet的基本概念.docx deleted file mode 100644 index 9702bb0..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/3.计算机网络与Internet的基本概念.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/4.计算机的历史及其常见应用.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/4.计算机的历史及其常见应用.docx deleted file mode 100644 index 4651075..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/4.计算机的历史及其常见应用.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/5.NOI以及相关活动的历史.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/5.NOI以及相关活动的历史.docx deleted file mode 100644 index 4a2957b..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/5.NOI以及相关活动的历史.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/6.字节与字.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/6.字节与字.docx deleted file mode 100644 index e497529..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/6.字节与字.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/7.程序设计语言以及程序编译与运行.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/7.程序设计语言以及程序编译与运行.docx deleted file mode 100644 index a044ccd..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/7.程序设计语言以及程序编译与运行.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/8.程序基本语句.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/8.程序基本语句.docx deleted file mode 100644 index 2d183f5..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/8.程序基本语句.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/9.类型综合.docx b/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/9.类型综合.docx deleted file mode 100644 index 12448d8..0000000 Binary files a/2.Course/5.C++_Exam/NOI/初赛相关/初赛分知识点训练/分模块知识点训练/9.类型综合.docx and /dev/null differ diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/CSP-J 综合卷复盘.pdf b/2.Course/5.C++_Exam/NOI/复习资料/CSP-J 综合卷复盘.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/CSP-J 综合卷复盘.pdf rename to 2.Course/5.C++_Exam/NOI/复习资料/CSP-J 综合卷复盘.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/CSP-J复赛 核心知识讲义.md b/2.Course/5.C++_Exam/NOI/复习资料/CSP-J复赛 核心知识讲义.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/CSP-J复赛 核心知识讲义.md rename to 2.Course/5.C++_Exam/NOI/复习资料/CSP-J复赛 核心知识讲义.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/CSP-J复赛 核心知识讲义.pdf b/2.Course/5.C++_Exam/NOI/复习资料/CSP-J复赛 核心知识讲义.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/CSP-J复赛 核心知识讲义.pdf rename to 2.Course/5.C++_Exam/NOI/复习资料/CSP-J复赛 核心知识讲义.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/J初赛合集.pdf b/2.Course/5.C++_Exam/NOI/复习资料/J初赛合集.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/J初赛合集.pdf rename to 2.Course/5.C++_Exam/NOI/复习资料/J初赛合集.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/S初赛合集.pdf b/2.Course/5.C++_Exam/NOI/复习资料/S初赛合集.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/S初赛合集.pdf rename to 2.Course/5.C++_Exam/NOI/复习资料/S初赛合集.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/信息奥初赛知识点总结(重点).pdf b/2.Course/5.C++_Exam/NOI/复习资料/信息奥初赛知识点总结(重点).pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/信息奥初赛知识点总结(重点).pdf rename to 2.Course/5.C++_Exam/NOI/复习资料/信息奥初赛知识点总结(重点).pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.1 进制转换.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.1 进制转换.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.10 OI常识.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.10 OI常识.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.11 计算机基础知识.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.11 计算机基础知识.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.2 逻辑运算.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.2 逻辑运算.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.3 栈、队列.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.3 栈、队列.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.4 二叉树的遍历.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.4 二叉树的遍历.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.5 哈夫曼树和哈夫曼编码.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.5 哈夫曼树和哈夫曼编码.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.6 各种排序算法.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.6 各种排序算法.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.7 图论基本算法.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.7 图论基本算法.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.8 hash表和二叉搜索树.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.8 hash表和二叉搜索树.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码 答案.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码 答案.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码 答案.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码 答案.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码 答案.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码 答案.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码 答案.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码 答案.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码.md b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码.md similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码.md rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码.md diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/1.9 原码、补码、反码.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/1.9 原码、补码、反码.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.1 进制转换_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.1 进制转换_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.1 进制转换_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.1 进制转换_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.10 OI常识_原创专项练习30题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.10 OI常识_原创专项练习30题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.10 OI常识_原创专项练习30题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.10 OI常识_原创专项练习30题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.11 计算机基础知识_原创专项练习100题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.11 计算机基础知识_原创专项练习100题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.11 计算机基础知识_原创专项练习100题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.11 计算机基础知识_原创专项练习100题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.2 逻辑运算_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.2 逻辑运算_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.2 逻辑运算_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.2 逻辑运算_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.3 栈、队列_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.3 栈、队列_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.3 栈、队列_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.3 栈、队列_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.4 二叉树的遍历_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.4 二叉树的遍历_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.4 二叉树的遍历_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.4 二叉树的遍历_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.6 各种排序算法_原创专项练习60题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.6 各种排序算法_原创专项练习60题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.6 各种排序算法_原创专项练习60题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.6 各种排序算法_原创专项练习60题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.7 图论基本算法_原创专项练习100题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.7 图论基本算法_原创专项练习100题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.7 图论基本算法_原创专项练习100题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.7 图论基本算法_原创专项练习100题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.8 hash表和二叉搜索树_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.8 hash表和二叉搜索树_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.8 hash表和二叉搜索树_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.8 hash表和二叉搜索树_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.9 原码、补码、反码_原创专项练习40题_无答案版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.9 原码、补码、反码_原创专项练习40题_无答案版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/无答案版本/原版/1.9 原码、补码、反码_原创专项练习40题_无答案版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/无答案版本/原版/1.9 原码、补码、反码_原创专项练习40题_无答案版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.1 数制转换_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.1 数制转换_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.1 数制转换_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.1 数制转换_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.10 OI常识_1.10 OI常识_原创专项练习30题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.11 计算机基础知识_1.11 计算机基础知识_原创专项练习100题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.2 逻辑运算_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.2 逻辑运算_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.2 逻辑运算_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.2 逻辑运算_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.3 栈、队列_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.3 栈、队列_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.3 栈、队列_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.3 栈、队列_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.4 二叉树的遍历_1.4 二叉树的遍历_原创专项练习40题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.5 哈夫曼树和哈夫曼编码_1.5 哈夫曼树和哈夫曼编码_原创专项练习40题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.6 各种排序算法_1.6 各种排序算法_原创专项练习60题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.7 图论基本算法_1.7 图论基本算法_原创专项练习100题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.8 hash表和二叉搜索树_1.8 hash表和二叉搜索树_原创专项练习40题_教师解析版.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题.pdf diff --git a/2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题_教师解析版.pdf b/2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题_教师解析版.pdf similarity index 100% rename from 2.Course/5.C++_Exam/NOI/初赛相关/初赛专题/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题_教师解析版.pdf rename to 2.Course/5.C++_Exam/NOI/题目/初赛专题分知识点训练/有答案版/1.9 原码、补码、反码_1.9 原码、补码、反码_原创专项练习40题_教师解析版.pdf