我司准备现场商品打折活动,为增强趣味性,初始时有N个商品不参与打折活动。 第一轮,将所有N个商品都调整为参加打折活动。 接下来第二轮,将会每两个商品中,第二个不参加打折活动。 第三轮,每三个商品中,第三个商品活动状态切换(即,参加变成不参加,不参加变成参加) 第i轮,每i个商品就切换第i个商品的活动状态。直到第N轮,只需要切换最后商品的活动状态。 请问第 N轮后有多少个商品还在参加活动? 提示 0 <= N <= 109

区块链毕设网qklbishe.com为您提供问题的解答

我司准备现场商品打折活动,为增强趣味性,初始时有N个商品不参与打折活动。

第一轮,将所有N个商品都调整为参加打折活动。

接下来第二轮,将会每两个商品中,第二个不参加打折活动。

第三轮,每三个商品中,第三个商品活动状态切换(即,参加变成不参加,不参加变成参加)

第i轮,每i个商品就切换第i个商品的活动状态。直到第N轮,只需要切换最后商品的活动状态。
请问第N轮后有多少个商品还在参加活动?
提示
  • 0 <= N <= 109

这道题本质上是“灯泡开关问题”,可以发现,每次会进行操作的活动位置即当前活动位置的因子。
如:第六个活动,会在第1,2,3,6轮被操作,而 6 =2*3 = 1*6,最后保持不参与打折状态;第四个活动会在第1,2,4轮被操作,而4 = 2*2 = 4*4,操作次数为奇数次,因此最后保持打折状态。
不难发现,当灯泡所处位置可以被开平方时,操作次数为奇数次,否则操作为偶数次,最后参与打折的活动个数实则是[1,n]中可以被开平方的数字个数,有如下代码:
import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param n int整型 
     * @return int整型
     */
    public int discountSwitch (int n) {
        // n个商品,n轮之后,还有几个商品参加打折活动
        int count = 0;
        for(int i=1;i*i<=n;i++){
            count++;
        }
        return count;
    }
}

编辑于 今天 15:55:05

以上就是关于问题我司准备现场商品打折活动,为增强趣味性,初始时有N个商品不参与打折活动。 第一轮,将所有N个商品都调整为参加打折活动。 接下来第二轮,将会每两个商品中,第二个不参加打折活动。 第三轮,每三个商品中,第三个商品活动状态切换(即,参加变成不参加,不参加变成参加) 第i轮,每i个商品就切换第i个商品的活动状态。直到第N轮,只需要切换最后商品的活动状态。 请问第 N轮后有多少个商品还在参加活动? 提示 0 <= N <= 109的答案

欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程

区块链NFT链游项目方科学家脚本开发培训

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 我司准备现场商品打折活动,为增强趣味性,初始时有N个商品不参与打折活动。 第一轮,将所有N个商品都调整为参加打折活动。 接下来第二轮,将会每两个商品中,第二个不参加打折活动。 第三轮,每三个商品中,第三个商品活动状态切换(即,参加变成不参加,不参加变成参加) 第i轮,每i个商品就切换第i个商品的活动状态。直到第N轮,只需要切换最后商品的活动状态。 请问第 N轮后有多少个商品还在参加活动? 提示 0 <= N <= 109