首页 > 编程语言 >算法刷题记录:日历中的数字

算法刷题记录:日历中的数字

时间:2023-06-02 14:24:51浏览次数:40  
标签:30 int 31 日历 算法 year 原理 day 刷题

题目链接

https://ac.nowcoder.com/acm/contest/19859/B

题目分析

很简单的一道数位统计的题目

  • 其中年和月是乘法原理。(固定住年和月,枚举该月有几天,所以是乘法原理)
  • x=0并且month<10时,月需要特判一位数的情况,是加法原理
  • 日是加法原理

AC代码

// Problem: 日历中的数字
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/19859/B
// Memory Limit: 262144 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <iostream>

using namespace std;

int y, m, x;
int day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int get_month_day(int year, int mon)
{
	int res = day[mon];
	if (mon == 2 && ((!(year % 4) && year % 100) || !(year % 400)))
		res += 1;
	return res;
}

// 1.判断年的所有情况 -> 乘法原理(要选的数字出现在年中)
// 2.判断月的所有情况 -> 乘法原理(要选的数字出现在月中)
// 3.判断日的所哟情况 -> 加法原理,数字中是否存在
int main()
{
	while (cin >> y >> m >> x)
	{
		// 处理年
		int t = y, ycnt = 0;
		while (t)
		{
			if (t % 10 == x) ycnt ++ ;
			t /= 10;
		}
		
		int day = get_month_day(y, m);
		ycnt *= day, t = m;
		// if (y == 2000) cout << day << endl;
		// 处理月,月有前导0(一位数特判)
		int mcnt = 0;
		while (t)
		{
			if (t % 10 == x) mcnt ++ ;
			t /= 10; 
		}
		mcnt *= day;
		if (!x && m < 10) mcnt += day;
		
		
		// 处理月
		int dcnt = 0;
		for (int i = 1; i <= day; ++ i)
		{
			int tmp = i;
			while (tmp) 
			{
				if (tmp % 10 == x) dcnt ++ ;
				tmp /= 10;
			}
		}
		if (!x) dcnt += 9;
		
		cout << ycnt + mcnt + dcnt << endl;
	}
}

标签:30,int,31,日历,算法,year,原理,day,刷题
From: https://www.cnblogs.com/ClockParadox43/p/17451632.html

相关文章

  • 强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE
    强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE算法1.强化学习基础知识点智能体(agent):智能体是强化学习算法的主体,它能够根据经验做出主观判断并执行动作,是整个智能系统的核心。环境(environment):智能体以外的一切统称为环境,环境在与智能体......
  • 强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析
    强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析1.SARSASARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决策过程策略的算法,通常应用于机器学习和强化学习学习领域中。它由Rummery和Niranjan在技术论文“ModifiedConnectionistQ-Learning(MCQL)......
  • 算法题分析:反转整数
    最近刷到了一道medium难度的算法题,比较典型,可以用语法特性和常规解法来解决。题目如下:给定一个32字节的有符号整型数字x,将x反转过来返回。如果反转x会让其数值超出32位有符号整型数字范围[-2^31,2^31-1],那么就返回0。假设运行环境不允许你存储64位整型数字(有符号或者无符号)。......
  • 算法——字符串(一)
    1、给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。1classSolution{2publicintlengthOfLongestSubstring(Strings){3intlen=s.length();4intmax=0;5intright=0;6Set<Character>set=new......
  • 最短路与生成树算法
    写在前面最短路部分的代码还是3月的,奇丑无比,大家见谅……最短路单源最短路径首先我们介绍一些基本概念。由于是单源最短路,我们定义一个起点\(s\),\(dis_u\)表示起点\(s\)到节点\(u\)的最短路长度。一般来讲,对于一条为\(w\)的边\(u\tov\),如果目前的最短路是正确......
  • 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树
    [参考链接]669.修剪二叉搜索树 [代码]1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init__(self,val=0,left=None,right=None):4#self.val=val5#self.left=left6#self.right=right......
  • python算法学习——第1天
    目录1、3,5,7的倍数判定2、鸡兔同笼3、计算有n个字符串中最长的字符串长度4、输出10个不重复的英文字母5、统计一段文字的单词个数并按字母顺序排序输出6、字典合并7、最大公约数&最小公倍数8、输出全排列9、输出<=n的全部回文数10、重复元素判定1、3,5,7的倍数判定num=int(inp......
  • STL algorithm算法
    Functionsin<algorithm>Non-modifyingsequenceoperations:all_ofTestconditiononallelementsinrange(functiontemplate)any_ofTestifanyelementinrangefulfillscondition(functiontemplate)none_ofTestifnoelementsfulfillconditi......
  • 算法学习day39动态规划part02-62、63
    packageLeetCode.DPpart02;/***62.不同路径*一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。*机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。*问总共有多少条不同的路径?*示例:*输入......
  • 算法学习day41动态规划part03-343、96
    packageLeetCode.DPpart03;/***343.整数拆分*给定一个正整数n,将其拆分为k个正整数的和(k>=2),并使这些整数的乘积最大化。*返回你可以获得的最大乘积。*示例:*输入:n=2*输出:1*解释:2=1+1,1×1=1。**/publicclassIntegerBre......