标签:map USACO1.1 Thirteenth int 31 Friday 数组 30 date
P1202题库链接:https://www.luogu.org/problem/P1202
难度:普及-
算法标签:模拟,数论
1.朴素模拟
本题使用数组和map来解都行,由于最近用map比较多,所以我使用map来解,建立一个map容器来记录每月13号对应星期出现的次数,并定义一个变量k来模拟每星期中的每一天,将平年中1到12月的天数存在date数组中,若第i年为闰年,则只需二月循环29次,其他与平年一样,按date数组循环即可,从1900年开始重复n次,最后输出map容器中周一到周日所对应的次数
1 #include <cstdio> 2 #include <map> 3 using namespace std; 4 map<int, int> m; 5 int date[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 6 int main() 7 { 8 int n, week = 1; 9 scanf("%d", &n); 10 for(int i = 1900; i <= 1900 + n - 1; ++i) 11 { 12 for(int j = 0; j <= 11; ++j) 13 { 14 if(j == 1) 15 { 16 if(i % 400 == 0) 17 { 18 for(int k = 1; k <= 29; ++k) 19 { 20 if(week - 1 == 7) week = 1; 21 if(k == 13) ++m[week]; 22 ++week; 23 } 24 ++j; 25 } 26 else if(i % 100 != 0 && i % 4 == 0) 27 { 28 for(int k = 1; k <= 29; ++k) 29 { 30 if(week - 1 == 7) week = 1; 31 if(k == 13) ++m[week]; 32 ++week; 33 } 34 ++j; 35 } 36 } 37 for(int k = 1; k <= date[j]; ++k) 38 { 39 if(week - 1 == 7) week = 1; 40 if(k == 13) ++m[week]; 41 ++week; 42 } 43 } 44 } 45 printf("%d %d %d %d %d %d %d", m[6], m[7], m[1], m[2], m[3], m[4], m[5]); 46 return 0; 47 }
标签:map,USACO1.1,Thirteenth,int,31,Friday,数组,30,date 来源: https://www.cnblogs.com/ZhangRunqi/p/11294478.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。