CSP-J 2023 入门级 第一轮 阅读程序(3)

【题目】

CSP-J 2023 入门级 第一轮 阅读程序(3)

#include <iostream> 
#include <cmath>
using namespace std;
int solve1(int n) {
    return n * n;
}
int solve2(int n) {
    int sum = 0;
    for (int i = 1; i <= sqrt(n); i++) {
        if (n % i == 0) {
            if (n / i == i) {
                sum += i * i;
            } else {
                sum += i * i + (n / i) * (n / i);
            }
        }
    }
    return sum;
}
int main() {
    int n;
    cin >> n;
    cout << solve2(solve1(n)) << " " << solve1((solve2(n))) << endl;
    return 0;
}

假设输入的n是绝对值不超过1000的整数,完成下面的判断题和单选题。
判断题
27. 如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和( )
28. 第13~14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次( )
29. 如果输入的n为质数,solve2(n)的返回值为 n 2 + 1 n^2+1 n2+1( )

单选题
30. 如果输入的n为质数p的平方,那么solve2(n)的返回值为( )
A. p 2 + p + 1 p^2+p+1 p2+p+1 B. n 2 + n + 1 n^2+n+1 n2+n+1 C. n 2 + 1 n^2+1 n2+1 D. p 4 + 2 p 2 + 1 p^4+2p^2+1 p4+2p2+1
31. 当输入为正整数时,第一项减去第二项的差值一定( )
A. 大于0 B. 大于等于0且不一定大于0 C. 小于0 D. 小于等于0且不一定小于0
32. 当输入为"5"时,输出为( )
A. “651.625” B. “650.729” C. “651.676” D. “652.625”

【题目考点】

数学

  • 因数
  • 质数

【解题思路】

int solve1(int n) {
    return n * n;
}

solve1(n),求 n 2 n^2 n2

int solve2(int n) {
    int sum = 0;
    for (int i = 1; i <= sqrt(n); i++) {
        if (n % i == 0) {
            if (n / i == i) {
                sum += i * i;
            } else {
                sum += i * i + (n / i) * (n / i);
            }
        }
    }
    return sum;
}

i从1循环到 n \sqrt{n} n ,如果i是n的因数:

  • 如果n/i为i,即i为 n \sqrt{n} n ,此时i是n的因数,把 i 2 i^2 i2加到sum中。
  • 如果n/i不为i,此时i与n/i是n的因数,把 i 2 i^2 i2 ( n / i ) 2 (n/i)^2 (n/i)2加到sum中。

i从1循环到 n \sqrt{n} n ,取循环中取到的i或n/i可以遍历n的所有因数。
因此solve2(n)求的是n的所有因数的平方和。

int main() {
    int n;
    cin >> n;
    cout << solve2(solve1(n)) << " " << solve1((solve2(n))) << endl;
    return 0;
}

主函数中,第一个输出的solve2(solve1(n)) n 2 n^2 n2的所有因数的平方和。第二个输出的solve1((solve2(n)))是n的所有因数的平方和的平方。

判断题
27. 如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和( )

答:T
上面已解释

  1. 第13~14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次( )

答:T
n的平方根因子,就是 n \sqrt{n} n n \sqrt{n} n 是整数),在计算因数的平方和时, ( n ) 2 (\sqrt{n})^2 (n )2只需要计算一次,需要进入第14行,而不能进入第16行被计算两次。

  1. 如果输入的n为质数,solve2(n)的返回值为 n 2 + 1 n^2+1 n2+1( )

答:T
质数n只有1和n两个因数,因数的平方和为 n 2 + 1 n^2+1 n2+1

单选题
30. 如果输入的n为质数p的平方,那么solve2(n)的返回值为( )
A. p 2 + p + 1 p^2+p+1 p2+p+1 B. n 2 + n + 1 n^2+n+1 n2+n+1 C. n 2 + 1 n^2+1 n2+1 D. p 4 + 2 p 2 + 1 p^4+2p^2+1 p4+2p2+1

答:B
n = p 2 n=p^2 n=p2,n的所有因数为: 1 , p , p 2 1, p, p^2 1,p,p2,因数的平方和为: 1 + p 2 + p 4 1+p^2+p^4 1+p2+p4或写为 1 + n + n 2 1+n+n^2 1+n+n2

  1. 当输入为正整数时,第一项减去第二项的差值一定( )
    A. 大于0 B. 大于等于0且不一定大于0 C. 小于0 D. 小于等于0且不一定小于0

答:D
如果输入的是n,第一项是 n 2 n^2 n2所有因数的平方和。第二项是n的所有因数的平方和的平方。
可以用特例法:
如果n是1,第一项是1,第二项是1,差是0。
如果n是2,第一项是4的所有因数1,2,4的平方和,是21。第二项是2的所有因数1,2的平方和5的平方为25。第一项减第二项小于0。
只有D符合条件。

  1. 当输入为"5"时,输出为( )
    A. “651 625” B. “650 729” C. “651 676” D. “652 625”

答:C
第一项是 5 2 = 25 5^2=25 52=25所有因数1,5,25的平方和: 1 2 + 5 2 + 2 5 2 = 651 1^2+5^2+25^2=651 12+52+252=651
第二项是5的所有因数1,5的平方和26的平方: 2 6 2 = 676 26^2=676 262=676

【答案】

  1. T
  2. T
  3. T
  4. B
  5. D
  6. C
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023 csp-j入门级第一轮试题是中国计算机科学会议(CSP)针对初学者设计的一道题。根据题目的具体要求,试题内容可能涉及算法、编程语言、数据结构等方面的知识。 对于这样的试题,学生们需要运用自己所学的知识和技能,通过编程实现题目要求。例如,可能需要设计一个算法来解决一个具体的问题,或者使用特定的数据结构来组织和处理数据。 为了完成这样的试题,学生们首先需要理解题目的要求和限制条件,确保对题目中涉及的概念和术语有所了解。接下来,他们需要分析问题,确定解决问题的方法和步骤。在实际编程实现时,可以选择合适的编程语言和工具,并按照题目要求进行编码。 在完成编码后,学生们需要进行测试和调试,确保程序能够正确运行并得到正确的结果。在测试过程中,可以使用一些已知的测试用例来验证程序的正确性,并对程序进行优化,以提高其性能。 最后,将代码提交,并等待评审结果。评审过程可能涉及代码质量、算法复杂度、正确性等方面的考量。根据评审结果,学生们可以了解自己的编程水平和不足之处,并进行相应的学习和提高。 总体来说,解答2023 csp-j入门级第一轮试题需要学生在编程基础上运用算法和数据结构的知识,进行问题的分析和解决。通过这样的学习和实践,学生们可以提高自己的编程能力,并逐渐成长为优秀的程序员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值