[趣题]取数

1 篇文章 0 订阅

前言

这是之前听闻的一道比较妙的题,现在感觉还是记录一下比较好

题目

给出 n ( 1 ≤ n ≤ 1000000 ) n(1\le n\le1000000) n(1n1000000),并且给你 n n n个数 a 1 ⋅ ⋅ ⋅ a n ( 0 ≤ a i &lt; n ) a_1···a_n(0\le a_i&lt; n) a1an(0ai<n)
让你从其中选出一些数,使得这些数的和模 n n n 0 0 0,输出任意一种方案,无解输出 − 1 -1 1


这是小学数学题
不要轻言放弃

这是小学数学题
不要轻言放弃

这是小学数学题
不要轻言放弃

这是小学数学题
不要轻言放弃


暴力

作为一名OIer背包是非常好想的吧^ _ ^,复杂度 Θ ( n 2 ) \Theta(n^2) Θ(n2),显然不能过


这是小学数学题
不要轻言放弃

这是小学数学题
不要轻言放弃

这是小学数学题
不要轻言放弃

这是小学数学题
不要轻言放弃


题解

一个结论,我们一定能够取出连续的一段使得这些数的和为 n n n
证明用到的是小学数学知识抽屉原理,对于前缀和模 n n n的值一共有 n + 1 n+1 n+1个,任意两个前缀对应一个子段,由于一个数模 n n n只有 n n n个取值,所以一定有两个前缀的前缀和模 n n n相同,取出即可
复杂度 Θ ( n ) \Theta(n) Θ(n),通过此题!

总结

这是一道考验思维的趣题
脑子是个好东西

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
慕课哈工大C语言第五周马克思手稿中的趣味数学题是一道有趣且具有挑战性的数学问题。这个问题是这样描述的:给定一个三位数n,将其个位数、十位数和百位数分别记作a、b和c,然后按照以下公式进行计算:n = a^3 + b^3 + c^3。如果计算结果等于n本身,则称该数为完全立方数。 这个问题需要我们编写程序,将所有的三位数都进行计算,并判断它们是否为完全立方数。代码的实现思路是使用三层循环,分别遍历所有的个位数、十位数和百位数的可能值,然后计算并判断是否为完全立方数。具体代码如下: ```c #include <stdio.h> int main() { int n, a, b, c; for (n = 100; n <= 999; n++) { a = n % 10; // 个位数 b = (n / 10) % 10; // 十位数 c = n / 100; // 百位数 if(n == (a * a * a + b * b * b + c * c * c)) { printf("%d 是完全立方数\n", n); } } return 0; } ``` 这段代码使用了一个for循环,从100到999遍历所有的三位数。在每次循环中,通过余和除法操作分别得到该数的个位数、十位数和百位数,并计算它们的立方和。然后,通过if语句判断计算结果是否等于原数n,如果相等,则输出该数是完全立方数。 通过运行这段代码,我们可以得到所有的完全立方数,即153和370。这个问题展示了编程在解决数学问题中的应用,同时也让我们了解到了完全立方数的概念和计算方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值