案例三:特殊的颠倒数(1)

文章分析了给定整数n如何通过旋转180度保持特定条件(能被3整除),并指出奇数和偶数情况下颠倒数的数量。代码展示了计算这种数个数的方法,答案为5的k次幂,其中k为n的一半。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:
从题目描述来看,本题中的“颠倒”既不是上下翻转、也不是左右翻转,而是顺时针或逆时针旋转180度

先仅仅考虑颠倒数的要求,如果n是奇数,假设n=2k+1(k≥1),则左边k位(第1位~第k位),每位都可以取0,1,8,6,9,第k+1位可以取0,1,8,右边k位取决于左边k位,因此颠倒数的个数为:5*5*5*…*5*3(有k个5),即3*5的k次幂;如果n是偶数,假设n=2k,则左边k位(第1位~第k位),每位都可以取0,1,8,6,9,右边k位取决于左边k位,因此颠倒数的个数为:5*5*5*…*5(有k个5),即5的k次幂

再考虑“能被3整除”这一要求,能被3整除,则各位数字之和除以3的余数为0。在本题中,n=2k+1(k≥1)为奇数,因此,左边k位数字和右边k位数字之和除以3的余数为0、1或2刚好第k+1位的取值(0,1,8)除以3的余数为0、1和2,因此第k+1位有且仅有1种选择:其他2k位数字和模3余1,那么第k+1位只能选8;其他2k位数字和模3余2,那么第k+1位只能选1;其他2k位数字和模3余0,那么第k+1位只能选0)。因此本题的答案就是5的k次幂

代码如下:

#include<iostream>
using namespace std;

int main()
{
    int n, k; cin >> n;
    k = n/2;
    int ans = 1;
    for(int i=1;i<=k;i++) 
        ans = ans*5; //只要i<=k就乘以5,答案为5^k
    cout << ans << endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值