日期问题

前置问题

  • year——>闰年?
year%400==0||year%100!=0&&year%4==0
&&的优先级高于||
  • month——>有多少天?
    month用int来表示,用一个辅助数组
mday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}

用空间换时间

题目
1.今年的第几天?
描述:输入年月日,计算该天是本年的第几天
输入:包括3个整数:
年(1<=Y<=3000)
月(1<=M<=12)
日(1<=D<=31)
输出:输入可能有多组测试数据,对于每组测试数据,输出一个整数,代表Input中的年、月、日对应本年的第几天

样例:
输入:
1998 9 20
2000 5 1
输出
263
122

方案一:用空间换时间

#include<cstdio>
int main() {int year, mon, day;int mday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int totalDay[13] = { 0 };for (int mon = 2; mon <= 12; mon++) {totalDay[mon] = totalDay[mon - 1] + mday[mon-1];}while (scanf("%d%d%d", &year, &mon, &day) != EOF) {//如果是闰年bool isLeap = year % 400 == 0 || year % 100 != 0 && year % 4 == 0;if (isLeap == true && mon >= 3) {printf("%d\n", totalDay[mon] + day + 1);}else {printf("%d\n", totalDay[mon] + day );}}
}

方案二:1990 1 1->1990 1 2->…->所求**【万能方案】**

2.打印日期
描述:给出年份m和一年之中的第n天,算出第n天是几月几日
输入:输入包括两个整数y(1<=y<=3000),n(1<=n<=366)
输出:可能有多组测试数据,对于每组数据,按yyyy-mm-dd的格式将输入中对于的日期打印出来
【万能方案】nextDay
如何实现yyyy-mm-dd格式
%4d不足则用空格填充
%04d不足则用0填充

#include<cstdio>
int main() {int y, n;int mday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };while (scanf("%d%d", &y, &n) != EOF) {int mon = 1;int day = 1;for (int i = 0; i < n-1; i++) {//注意不是n,而是n-1,因为是从1-1开始判断的//闰年问题bool isLeap = y % 400 || y % 100 != 0 && y % 4 == 0;if (isLeap == true) {mday[2] = 29;}else {mday[2] = 28;}++day;if (day > mday[mon]) {++mon;day = 1;if (mon > 12) {mon = 1;++y;}}}printf("%04d-%02d-%02d", y, mon, day);}
}

3.day of week
示例

输入: 9 October 200114 October 2001
输出:TuesdaySunday

C风格的字符串,用于输入输出 char[]
C++风格的字符串,用于复杂操作 string

include<string>
using namespace std;
//初始化 string str1=str;//"hello"
连接 str1+"world"——>"helloworld"
字符 str1[0]——>'h'
长度 str1.length()
判断相等 str1=="hello"
比较字符 str1>"abandon"
从C++=>C str1.c_str1()

map映射

#include<map>
using namespace std;
//键key-->值value
map<string,string>myMap={{"Caixukun","ikun"},
{"Wuyifan","meigeni"}
};
char str[100];
scanf("%s",str);
string name=str;
//myMap[key]根据key映射到对应的值(C++风格的字符串)
printf("%s的粉丝被称为%s\n",name.c_str(),myMap[name].c_str());

代码

#include<cstdio>
#include<string>
#include<map>
using namespace std;
int main() {int mday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };string intToWeekday[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };map<string, int>monthToint = {{"January",1},{"Februray",2},{"March",3},{"April",4},{"May",5},{"June",6},{"July",7},{"Auguest",8},{"September",9},{"October",10},{"November",11},{"December",12}};int year,mon, day;char str[100];string month;bool isBefore;//9 October 2001while (scanf("%d%s%d", &day, str, &year )!= EOF){month = str;//把字符串从C风格转换成C++风格mon = monthToint[month];//从字符串到整数if (year < 2023|| 2023 == year && mon < 2|| 2023 == year && 2 == mon && day < 6) {isBefore = true;}else {isBefore = false;}//从begin走到endint begYear, begMon, begDay, endYear, endMon, endDay;if (isBefore) {begYear = year;begMon = mon;begDay = day;endYear = 2023;endMon = 2;endDay = 6;}else {begYear = 2023;begMon = 2;begDay = 6;endYear = year;endMon = mon;endDay = day;}int totalDay = 0;while (true) {if (begYear == endYear && begMon == endMon && begDay == endDay) {break;}++totalDay;bool isLeap = begYear % 400 == 0 || begYear % 100 != 0 && begYear % 4 == 0;if (isLeap == true) {mday[2] = 29;}else {mday[2] = 28;}++begDay;if (begDay > mday[begMon]) {begDay = 1;++begMon;if (begMon > 12) {begMon = 1;begYear++;}}}if (isBefore) {//(x+totalDay)%7=4-->(11-totalDay%7)%7printf("%s\n", intToWeekday[(11 - totalDay % 7) % 7].c_str());}else {printf("%s\n", intToWeekday[(totalDay + 1) % 7].c_str());//2023-2-6是周一}}
}

4.剩下的树
描述:有一条长度为整数L(1<=L<=10000)的马路,可以将它想象为数轴上长度为L的一条线段。起点是坐标源点。在每个整数坐标点处有一棵树,在0,1,2,…,L;L+1个位置上有L+1棵树。限制要移走一些树,移走的树的区间用一对数字表示,如“100 200”表示移走从100到200之间(包括端点),可能有M个区间,区间之间可能重叠。现在要求移走所有区间的树之后剩下的树
输入:两个整数L(1<=L<=10000)和M(1<=M<100).接下来有M组整数,每组有一对数字
输出:可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的根数
样例:

输入:
500 3
100 200
150 300
470 471
输出:
298

代码

#include<cstdio>
int main() {int tree[10000];//1:表示活着,0:表示死了int L, M;scanf_s("%d%d", &L, &M);//种L+1棵树for (int i = 0; i <= L; i++) {tree[i] = 1;}for (int idx = 0; idx < M; idx++) {//外面的循环使用不常见的变量名,避免冲突int left, right;scanf_s("%d%d", &left, &right);for (int i = left; i <= right; i++) {tree[i] = 0;}}int totalNumber = 0;for (int i = 0; i <= L; i++) {if (tree[i] == 1) {++totalNumber;}}printf("%d\n", totalNumber);
}

5.手机键盘
描述
按照手机键盘输入字母的方式。计算所花费的时间,例如,a,b,c都在“1”键上,输入a只需按1次键,输入c需要连续按3次键。如果连续两个字符不在一个键上,那么可以直接按; 例如,ad需要按2次,kz需要按6次,那么两次按键之间需要等一段时间:例如ac,按了a之后,需要等一会儿才能按c,现在假设每被按一次需要花费一个时间段,等待时间需要2个时间段。现在输出一串字符,计算输入它所花费的时间。
输入
一个长度不大于100的字符串,串种只有手机键上有的小写字母。
输出
输入可能包含多组数据,对于每组数据,输出按下input所给字符串需要时间。
样例:

输入:bobwww
输出:77

九宫格键盘

题解思路

  • 字符串种每个字符本身要按几下——>map<char,int>
  • 每个字符属于哪个按键——>判断是否等待【使用map<char,int>】

代码

#include<map>
#include<cstdio>
using namespace std;
int main() {//某个字母需要输出多长时间map<char, int>inputTime = {{'a',1},{'b',2},{'c',3},{'d',1},{'e',2},{'f',3},{'g',1},{'h',2},{'i',3},{'j',1},{'k',2},{'l',3},{'m',1},{'n',2},{'o',3},{'p',1},{'q',2},{'r',3},{'s',4},{'t',1},{'u',2},{'v',3},{'w',1},{'x',2},{'y',3},{'z',4}};//某个字母属于哪个按键map<char, int>keyMap = {{'a',2},{'b',2},{'c',2},{'d',3},{'e',3},{'f',3},{'g',4},{'h',4},{'i',4},{'j',5},{'k',5},{'l',5},{'m',6},{'n',6},{'o',6},{'p',7},{'q',7},{'r',7},{'s',7},{'t',8},{'u',8},{'v',8},{'w',9},{'x',9},{'y',9},{'z',9}};char str[101];while (scanf_s("%s", str, sizeof(str)) != EOF) {//用scanf则是:scanf("%s",str);int lastInput = 1;//初始的时候,lastInput置为和其他所有按键都不同的键int totalTime = 0;for (int i = 0; str[i] != '\0'; ++i) {//遍历C风格的字符串//判断一下是否需要等待if (lastInput == keyMap[str[i]]) {totalTime += 2;//等待}totalTime += inputTime[str[i]];//输入本字符需要的时间lastInput = keyMap[str[i]];//记录本次按下的数字}printf("%d\n", totalTime);}
}

C/C++模拟问题(二)相关推荐

  1. 五年一贯制专转本c语言真题,江苏省五年一贯制专转本《C语言程序设计》模拟试卷二(晓庄)...

    江苏省五年一贯制专转本 <C语言程序设计>模拟试卷二(晓庄) 一.填空題(每题2分,共16分) 1.整型常量默认类型是.实型默认类型是.函数默认类型是 2. 若k为 int整型变量且赋值7 ...

  2. 2013年计算机专业对口模拟试题二,计算机对口升学模拟试题全解.doc

    计算机对口升学模拟试题全解 2013年计算机专业对口高考模拟试题二 一.选择题 1.计算机硬件系统由( )组成 A.CPU和内存 B.控制器和运算器 C.主机和外设 D.CPU.内存和外存 2.下列叙 ...

  3. 大学计算机基础实验指导试题,(大学计算机基础实验指导)模拟试题(二)参考答案...

    (大学计算机基础实验指导)模拟试题(二)参考答案 (非计算机专业A卷) 一.填空题(共20分,每空1分) 1.电子管2.分时系统.实时系统3..txt 4.主码 5.实体.参照.用户定义6.同轴电缆. ...

  4. c语言中二次规划函数是哪个好,c语言程序设计规划模拟试题二(含答案).doc

    c语言程序设计规划模拟试题二(含答案) C语言程序设计模拟试题二(含答案)1. 下列电子邮件地址中正确的是(其中□表示空格)A) Malin& B) malin@C) Lin□Ma& ...

  5. 自考c语言程序阅读题,自考C语言程序设计模拟试题二答案.DOC

    本资料由广州自考网收集整理,更多自考资料请登录 HYPERLINK "http://www.gzzk.cc" www.gzzk.cc下载 再长的路,一步步也能走完,再短的路,不迈开 ...

  6. c语言程序设计移动字母,C语言程序设计模拟试题二(含答案)

    C语言程序设计模拟试题二(含答案) 1.下列电子邮件地址中正确的是(其中□表示空格) A) Malin&http://www.doczj.com/doc/2969157fa26925c52cc ...

  7. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现2

    流体模拟(二) SPH算法实现2: 在前面一节我们完成了粒子缓存类,网格类和邻接表类.我们现在可以正式的整合在我们的流体系统类中了. 流体系统类 class FluidSystem{public:Fl ...

  8. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现1

    流体模拟(二) SPH算法实现1: 由于我们计算每个粒子的状态时,都需要获得在它光滑核半径内(邻域内)的所有粒子信息.我们如果遍历每个粒子,计算欧式距离的话,那开销就过于庞大了.因此我们可以将我们的空 ...

  9. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(3)-光滑核函数

    流体模拟(二) 光滑核函数: sph中涉及的光滑核可以理解为:在一定的光滑核半径内,所受的力受距离权重的影响,距离越近所受影响越大.其表现形式如图所示. 这里我们便可以将流体看成一个个粒子的集合,每一 ...

  10. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(2)-粒子受力分析

    流体模拟(二) SPH算法的粒子受力分析: SPH算法的基本设想,就是将连续的流体想象成一个个相互作用的微粒,这些粒子相互影响,共同形成了复杂的流体运动.其实现的原理则是我们在初始空间里创建多个粒子, ...

最新文章

  1. Color Blended Layers
  2. CSS内置的几个标准的伪类和伪对象
  3. 基尼指数——基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。基尼系数介于0-1之间,基尼系数越大,表示不平等程度越高。...
  4. hdu3336 KMP + DP 前缀数组出现的次数
  5. js date 当前日志往后一个月_【应用实例】如何利用 Python 生成器 yield 监控日志?...
  6. 汇编语言 循环嵌套 将datasg段中每个单词改为大写字母 改进版
  7. 蒙娜丽莎,品牌创新的探索者
  8. 2011年上半年软考成绩查询网站,祝贺自己顺利通过2011年系统分析师考试!
  9. html主要的骨架结构
  10. java工作笔记018---java中BigDecimal小数位数的四舍五入等操作
  11. 无人驾驶(大安全概念)
  12. XWindow与GtkWindow的转换
  13. 《大数据之路》阅读笔记--数据同步
  14. python怎么判断质数和合数_如何快速判断是质数还是合数 - 草稿
  15. 【2022 网鼎杯】青龙组 crypto WriteUp
  16. 理解redux-thunk
  17. 打造一个实用的Ubuntu
  18. Hibernate:Acquisition Attempt Failed Clearing pending acquires.
  19. macOS Catalina 10.15.x.iso macOS Mojave 10.14.6 下载地址
  20. Arcgis中的标注操作(一)

热门文章

  1. 论文阅读笔记——Backdoor Defense with Machine Unlearning
  2. xv6操作系统中添加用户应用程序
  3. Web 基础之CSS (全文5w字,超级详细)
  4. 制造企业如何利用数据分析来提升企业管理效率?
  5. 香港科技大学张潼:顶尖人才仍稀缺,AI落地任重道远
  6. 数字通信世界杂志数字通信世界杂志社数字通信世界编辑部
  7. html简单网页编写3
  8. 【报告分享】2022中国生育成本报告-育娲人口研究(附下载)
  9. 【ITOO高校云平台】——浅析权限系统中角色与职位
  10. Java文件下载选择路径注意事项