分析:
从题目描述来看,本题中的“颠倒”既不是上下翻转、也不是左右翻转,而是顺时针或逆时针旋转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;
}