您现在的位置是:首页 > 正文

CSP-J 2022 入门级 第一轮 完善程序(1) 第35-39题

2024-04-01 06:42:23阅读 2

【题目】

CSP-J 2022 入门级 第一轮 完善程序(1) 第35-39题
(枚举因数) 从小到大打印正整数 n 的所有正因数。
试补全枚举程序。

01 #include <bits/stdc++.h>
02 using namespace std;
03
04 int main() {
05     int n;
06     cin >> n;
07
08     vector<int> fac;
09     fac.reserve((int)ceil(sqrt(n)));
10
11     int i;
12     for (i = 1; i * i < n; ++i) {
13         if () {
14             fac.push_back(i);
15         }
16     }
17
18     for (int k = 0; k < fac.size(); ++k) {
19         cout <<<< " ";
20     }
21     if () {
22         cout <<<< " ";
23     }
24     for (int k = fac.size() - 1; k >= 0; --k) {
25         cout <<<< " ";
26     }
27 }
  1. ①处应填()
    A. n % i == 0
    B. n % i == 1
    C. n % (i-1) == 0
    D. n % (i-1) == 1
  2. ②处应填( )
    A. n / fac[k]
    B. fac[k]
    C. fac[k]-1
    D. n / (fac[k]-1)
  3. ③处应填( )
    A. (i-1) * (i-1) == n
    B. (i-1) * i == n
    C. i * i == n
    D. i * (i-1) == n
  4. ④处应填( )
    A. n-i
    B. n-i+1
    C. i-1
    D. I
  5. ⑤处应填( )
    A. n / fac[k]
    B. fac[k]
    C. fac[k]-1
    D. n / (fac[k]-1)

【题目考点】

1. stl vector
  • 声明vector对象:vector<数据类型> 对象名
    例:vector<int> vec;
    (以下示例中vec表示vector对象)

  • vec.capacity() 返回vec的容量。
    vector对象的容量指当前已经分配给该对象的内存空间。vector对象会根据保存数据的数量自动改变自身的容量。当元素数量增加时,会让容量依次变为1,2,4,8,16…,但在元素减少时不会自动减少容量。

  • vec.reserve(容量),手动设置vector的容量,预先为vector对象分配空间,以免在运行过程中触发扩容。

2. 因数

【解题思路】

05     int n;
06     cin >> n;
08     vector<int> fac;
09     fac.reserve((int)ceil(sqrt(n)));

先输入了n
第8行声明了一个vector类对象,名字为fac。factor是因数的意思,所以fac这个vector保存的是因数。
第9行,ceil是向上取整(返回值类型是double),sqrt是开根号。第9行做的事情是把fac的容量设为 ⌈ n ⌉ \lceil\sqrt{n}\rceil n

11     int i;
12     for (i = 1; i * i < n; ++i) {
13         if () {
14             fac.push_back(i);
15         }
16     }

这里就是把n的所有 i 2 < n i^2<n i2<n的因数保存在fac之中。
数字i若是n的因数,那么n能整除i,n除以i的余数为0。第35题选A:n % i == 0。

18     for (int k = 0; k < fac.size(); ++k) {
19         cout <<<< " ";
20     }

因为要从小到大打印n的所有因数,所以这里先把fac中所有满足 i 2 < n i^2<n i2<n的因数输出。输出fac中的第k个元素:fac[k]。第36题选B。

21     if () {
22         cout <<<< " ";
23     }

接着是看是否有 i 2 = n i^2=n i2=n的情况,如果有则输出i。
第37题选C:i*i==n,第38题选D: i。

24     for (int k = fac.size() - 1; k >= 0; --k) {
25         cout <<<< " ";
26     }

最后输出 i 2 > n i^2>n i2>n的n的因数i。
假设fac中的元素是a, b, c, d,
那么接下来应该输出n/d, n/c, n/b, n/a。
fac中的元素为:fac[0], fac[1], …, fac[fax.size()-1],接下来应该输出的是:n/fac[fax.size()-1], n/fac[fax.size()-2], …, n/fac[0]。
所以第39题选A:n/fac[k]

【答案】

  1. A
  2. B
  3. C
  4. D
  5. A

网站文章

  • vue在不同平台构建的问题

    最近换了mac m1芯片,让原本的项目出现了很多和平台相关的问题,最主要的问题就是m1芯片的cpu架构为arm架构,而Intel芯片cpu架构为amd架构最近在改以前在window系统下写的vue项目...

    2024-04-01 06:41:36
  • 动态规划基本要素

    动态规划性质: 1 最优子结构性质 2 子问题重叠性质 ----->该问题可用动态规划算法求解的基本要素1.最优子结构当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。最优子结构...

    2024-04-01 06:41:30
  • C++ 11 -智能指针

    C++ 11 -智能指针

    什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。

    2024-04-01 06:41:23
  • Docker安装Tomcat、MySQL和Redis

    Docker安装Tomcat、MySQL和Redis

    总体步骤Docker安装Tomcatdocker hub上查找tomcat镜像docker search tomcat从docker hub上拉取tomcat镜像到本地docker pull tomc...

    2024-04-01 06:40:42
  • c语言中矩阵ab相乘,c语言矩阵相乘

    该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序清单#include&nbspint&nbspmain(void){&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspchar&nbsp&nbsp&nbsp&nbspa[2][3];&nbsp&...

    2024-04-01 06:40:34
  • 如何在Android应用程序中实现后台服务?

    注意,服务在后台执行时,它并不会自动停止。如果你想停止服务,需要在代码中显式地调用stopService()方法。另外,如果你想让服务在应用程序退出后仍然运行,你需要将服务设置为前台服务,这可以通过调...

    2024-04-01 06:40:26
  • ES6 入门—ES6 迭代器

    ES6 入门—ES6 迭代器

    迭代器,是 ES6 引入的一种新的遍历机制,主要讲解的是 Iterator 、迭代过程、可迭代的数据结构。

    2024-04-01 06:40:18
  • 计算机视觉学习:第一天

    计算机视觉学习:第一天编程语言:Python代码引自 《深度学习与计算机视觉》import matplotlib.pyplot as pltimport numpy as npfrom mpl_too...

    2024-04-01 06:39:38
  • 谈谈java中的WeakReference

    谈谈java中的WeakReference

    Java语言中为对象的引用分为了四个级别,分别为 强引用 、软引用、弱引用、虚引用。本文只针对java中的弱引用进行一些分析,如有出入还请多指正。在分析弱引用之前,先阐述一个概念:什么是对象可到达和对象不可到达状态。其实很简单,我举个例子:现在有如下两个类class A class B,在JVM上生成他们两个类的实例分别为 instance a  instance b有如下

    2024-04-01 06:39:32
  • 多图--两种方法----C++改变常成员函数(Const)的值

    多图--两种方法----C++改变常成员函数(Const)的值

    常成员函数: &lt;1&gt; 成员函数后面加了const。&lt;2&gt; 不能修改类的成员,不能对它赋值,只是一个可读函数。提高程序的可读性,可靠性。如图,fun函数是常成员函数: 将i的值改为100,则会报错: 第一种修改方法:用mutable关键字: 看效果:第二种修改方法:用this指针: 有什么问题欢迎留言!~~~~...

    2024-04-01 06:39:25