当前位置: 首页 > news >正文

【例3.5】位数问题(信息学奥赛一本通-1313)

【题目描述】

在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。

【输入】

读入一个数N(N≤1000)。

【输出】

输出有多少个数中有偶数个数字3。

【输入样例】

2

【输出样例】

73

【题解代码】

#include<bits/stdc++.h>
using namespace std;

/* 
                 1位数时               2位数时                         3位数时
奇数个3的个数    odd[1]=1     odd[2]=9*odd[1]+1*even[1]      odd[2]=9*odd[1]+1*even[1]
偶数个3的个数    even[1]=9    even[2]=1*odd[1]+9*even[1]     even[2]=1*odd[1]+9*even[1]
*/

/*
边界条件:odd[1]=1  
		  even[1]=9

递推关系式:odd[i] = 9 * odd[i - 1] + 1 * even[i - 1];
			even[i] = 1 * odd[i - 1] + 9 * even[i - 1];

注意:最高位不能为0(即i=n时)
*/

const int N = 1e3 + 10;
int odd[N], even[N];

int main()
{
	int n; cin >> n;

	odd[1] = 1, even[1] = 9;
	for (int i = 2; i <= n; i++)
	{
		if (i == n)  //最高位不能为0
		{
			odd[i] = (8 * odd[i - 1] + 1 * even[i - 1]) % 12345;
			even[i] = (1 * odd[i - 1] + 8 * even[i - 1]) % 12345;
		}
		else
		{
			odd[i] = (9 * odd[i - 1] + 1 * even[i - 1]) % 12345;
			even[i] = (1 * odd[i - 1] + 9 * even[i - 1]) % 12345;
		}
	}
	cout << even[n];

	return 0;
}

相关文章:

  • BertTokenizer.from_pretrained的讲解和使用
  • golang编写UT:applyFunc和applyMethod区别
  • Oracle数据库服务器地址变更与监听配置修改完整指南
  • websocket结合promise的通信协议
  • 短期趋势动量策略思路
  • Thales靶机攻略
  • 鸿蒙移动应用开发--UI组件布局
  • 批量优化与压缩 PPT,减少 PPT 文件的大小
  • 【CSS3】01-初始CSS + 引入 + 选择器 + div盒子 + 字体修饰
  • Sar: 1靶场渗透
  • MoManipVLA:将视觉-语言-动作模型迁移到通用移动操作
  • 自然语言处理(13:RNN的实现)
  • 接口测试是什么
  • Mininet-topo.py源码解析
  • Linux--环境变量
  • Ubuntu 更换阿里云镜像源图文详细教程
  • Android面试总结之Android RecyclerView:从基础机制到缓存优化
  • 浅尝AI编程工具Trae
  • javascript实现一个函数,将数组中的元素随机打乱顺序
  • 如何用C#继承提升游戏开发效率?Enemy与Boss案例解析
  • 广西壮族自治区党委副书记、自治区政府主席蓝天立接受审查调查
  • 媒体评欧阳娜娜遭民进党当局威胁:艺人表达国家认同是民族大义
  • 泽连斯基与埃尔多安会面,称已决定派遣代表团前往伊斯坦布尔
  • 中国人民银行等四部门联合召开科技金融工作交流推进会
  • 坚持吃素,是不是就不会得高血脂了?
  • 夜读丨读《汉书》一得