蓝桥杯 字符串和日期

有一个类型的题目是找到输出图形的规律,然后将其实现。观察下面的图形。你想想你该怎么输出这个图形呢?

  ABBB
#include<stdio.h>
int main(){printf(" A\n");printf("BBB\n");return 0;
}

那么,对于如下的图形:

  ABBB
CCCCC
#include<stdio.h>
int main(){printf("  A\n");printf(" BBB\n");printf("CCCCC\n");return 0;
}

前面分别对应的是输出两层和三层的情况。我们输入需要输出的层数n,当n≤5的时候,我们可以枚举n的不同取值,然后分别输出。如果需要输出更多层,按照上面的方法,确实可以完成任务,但是对应的代码量会更大,编码时间也更长。因此当n>5的时候,我们就需要一些其他的方法来简化代码实现。
仔细观察会发现,第i层输出的前面的空格数(尾部不需要输出空格)和字符的个数都是有规律的,可以根据n和i计算出来。对应输出的字符的ASCI码是‘A’+i-1,其中‘A’可以直接表示字符A的ASCI码。然后我们就可以直接用循环控制来输出了。

给定一个层数n,
输出字母三角形。
输入格式
输入一个整数n(0<n<=26),表示字母三角形
的层数。
输出格式
按照题目播述,输出字母三角形。
样例输入1

2

样例输出1

 A
BBB

样例输入2

3

样例输出2

  ABBB
CCCCC
#include<iostream>
#include<string>
using namespace std;
int main(){int n;cin>>n;for(int i=1;i<=n;i++){string space = string(n-i,' ');string ch = string(2*i-1,'A'+i-1);cout<<space+ch<<endl;}return 0;
}

这次我们输出一个稍微复杂的三角形,输入一个大写字母(A-Z)或者一个数字(1-9)。
比如输入是F的时候,编出:

     AABAABCBAABCDCBAABCDEDCBA
ABCDEFEDCBA

输入是3的时候,输出:

  1121
12321

输入格式
输入一个数字(1-9)或者一个大写字母

#include<iostream>
using namespace std;
int main(){char c;cin>>c;if(c>='A'&&c<='Z'){for(int i=1;i<=c-'A'+1;i++){for(int j=1;j<=c-'A'+1-i;j++){cout<<" ";}for(int j=1;j<=i;j++){cout<<(char)('A'+j-1);}for(int j=i-1;j>=1;j--){cout<<(char)('A'+j-1);}cout<<endl;}}else{for(int i=1;i<=c-'1'+1;i++){for(int j=1;j<=c-'1'+1-i;j++){cout<<" ";}for(int j=1;j<=i;j++){cout<<(char)('1'+j-1);}for(int j=i-1;j>=1;j--){cout<<(char)('1'+j-1);}cout<<endl;}}return 0;
}

在这里插入图片描述

在这里插入图片描述

假设地图是一个n行rn列的方格地图,地图等个
格子·代表一个宝题。比如2行2列的地图如下:

**
**

要建的房子如下:

+-+-+
|*|*|
+-+-+
|*|*|
+-+-+

现在告诉你地图的行列数 画出房子的设计图
输入格式
一行两个整数n,m(0<n,m≤50),分别表示地图行数和列数。
输出格式
按照题目中要求的格式输出地图。
样例输入1

2 2

样例输出1

+-+-+
|*|*|
+-+-+
|*|*|
+-+-+

样例输入2

3 4

样例输出2

+-+-+-+-+
|*|*|*|*|
+-+-+-+-+
|*|*|*|*|
+-+-+-+-+
|*|*|*|*|
+-+-+-+-+
#include<iostream>
using namespace std;
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<"+-";}cout<<"+"<<endl;for(int j=1;j<=m;j++){cout<<"|*";}cout<<"|"<<endl;}for(int j=1;j<=m;j++){cout<<"+-";}cout<<"+"<<endl;return 0;
}

在这里插入图片描述

字符串

字符串是编程语言中非常常用的一种数据类型,字符串的处理也是各类算法竞赛中考察较多的一类题型。字符串,简单地说,就是由若干个字符连接在一起的串。
在C/C++语言中规定,末尾以\0结束的字符型数组称为字符串。这里值得强调的是,只有以\0结束的才能算字符串,否则只
能算作字符型数组。这在C/C++中算是一种标准。也只有以\0结束的字符数组才能以“%s”的方式用printf输出,否则输出的结果会非常奇怪。自己在char数组上构造一个字符串的时候,忘记在末尾加\0可能会导致访问非法内存的错误。
在这里插入图片描述
字符串处理函数
很多情况下,都需要对字符串进行复制、剪切、比较等等操作。这些操作理论上都可以自己写代码实现,但是由于这些操作经常使用,每次都要实现一遍太繁琐,现在的大部分语言都提供了基础了字符串操作的库函数。C/C++的字符串处理相关的函数在string.h头文件中。

字符串复制

C/C++中函数原型charstrcpy(chardestin,char*source),将source字符串复制到destin。
C/C++语言示例程序:

#include<stdio.h>
#include<string.h>
int main(){char name[10];char *str="adadad";strcpy(name,str);printf("%s\n",name);return 0;
}

在这里插入图片描述

字符串拼接

C/C++中函数charstrcat(chardest,char*source),可以将source字符串拼接到dest后面。注意,dest必须有足够的空间来容纳拼接出的字符串。
C/C++示例程序:

#include<stdio.h>
#include<string.h>
int main(){char dest[25];char *str1 ="hello", *str2=" ",*str3 ="jisuanke";strcat(dest,str1);strcat(dest,str2);strcat(dest,str3);printf("%s\n",dest);return 0;
}

在这里插入图片描述
c++字符串可以直接用+号连接

#include<iostream>
using namespace std;
#include<string.h>
int main(){
char dest[25];string s1="a";string s2="b";cout<<s1+s2<<endl;return 0;
}

在这里插入图片描述

字符串比较

C/C++中函数int strcmp(charstr1,charstr2),从第一个字符开始逐字符比较两个字符串的ASCll码。如果下标为i的字符不相等,则函数返回str1[i]-str2[i]。如果两个字符串完全相同,则会返回0。

#include<string.h>
#include<stdio.h>
int main(){char *str1="cd",*str2="abc";int res = strcmp(str1,str2);if(res>0){printf("%s is greater than %s\n",str1,str2);}else if(res==0){printf("%s is same as %s\n",str1,str2);}else{printf("%s is less than %s\n", str1,str2);}return 0;
}

在这里插入图片描述

对称字符串

A1: A
A2:ABA
A3: ABACABA
A4: ABACABADABACABA
. . .

对于给定的N,你能根据规律输出AN吗?
输入格式
仅有一个数:N(N≤20)。
输出格式
一行字符串,表示字符串AN。
样例输入

2

样例输出

ABA
#include<stdio.h>
#include<string.h>
char res[5000000];
int main(){int n;scanf("%d",&n);int len = 0;for(int i=1;i<=n;i++){strcat(res+len+1,res);res[len]='A'+i-1;len = strlen(res);}printf("%s\n",res);return 0;
}

在这里插入图片描述

寻找字符串

在一个字符串里找另一个字符串出现了多少次
找到的结果可以重叠
如一号字符串为abababa, 二号字符串为aba
二号字符串在一号字符串中出现了三次
输入格式

输入包含两行,第一行为一号字符串,第二行为二号字符串
两个字符串肯能包含除换行、回车、\0外的任何字符,两个字符串的长度均不大于1000
样例输入1

i miss you!
you

样例输出1

1
#include<cstdio>
#include<cstring>
char s1[1005],s2[1005];
int main(){fgets(s1, 1004, stdin);//fgets会读入换行符fgets(s2,1004,stdin);//用gets就不用-1int len1 = strlen(s1)-1,len2=strlen(s2)-1;int ans=0;for(int i=0;i+len2-1<len1;i++){bool matched = true;for(int j=0;j<len2;j++){if(s1[i + j] != s2[j]){matched=false;break;}}if(matched){ans++;}}printf("%d",ans);return 0;
}

在这里插入图片描述
gets 函数,它的任务是从 stdin 流中读取字符串,直至接收到换行符或 EOF 时停止,并将读取的结果存放在 buffer 指针所指向的字符数组中。这里需要注意的是,换行符不作为读取串的内容,读取的换行符被转换为 null(’\0’) 值,并由此来结束字符串。即换行符会被丢弃,然后在末尾添加 null(’\0’) 字符。
注意:gets函数由于没有指定输入字符大小,所以会无限读取,一旦输入的字符大于数组长度,就会发生内存越界,从而造成程序崩溃或其他数据的错误。

相对于 gets 函数,fgets 函数最大的改进就是能够读取指定大小的数据,从而避免 gets 函数从 stdin 接收字符串而不检查它所复制的缓冲区空间大小导致的缓存溢出问题。
fgets(str, N, stdin) ; str 是指字符数组,N指
最大读入字符数,stdin 表明读取的哪个文件,如果是从键盘上读入数据,可以使用 stdin 作为该参数。

fgets只能读取N-1个字符,包括最后的换行符(’\n’),读完结束后系统将自动在最后加’\0’(gets读完结束后系统自动会将’\n’置换成’\0’)。

当你从键盘上输入 <=N-1 个字符(包括’\n’)时,那么字符串str会以 ‘\n\0’ 结尾。这就造成了strlen(str)比你想象的大 1
当你从键盘上输入>N-1个字符(包括’\n’)时,那么字符串str会以’\0’结尾。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算出生日在星期几

输入格式
输入三个正整数,分别表示年、月、日。保证输入
年份合法。
输出格式
输出星期几。
用Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Monday表示星期几
样例输入1

1 1 1

样例输出1

Monday

样例输入2

2016 11 29

样例输出2

Tuesday
#include<iostream>
#include<string>
using namespace std;
int whatday(int y,int m,int d){//返回正确的日期,用0~6表示 星期 1 - 7int ans = 0;for(int i=1;i<y;i++){if((i % 100 !=0&&i%4==0)||i%400==0){ans+=366%7;ans%=7;}else{ans+=365%7;ans%=7;}} for(int i=1;i<m;i++){if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ans+=31%7;ans%=7;}else if(i==4||i==6||i==9||i==11){ans+=30%7;ans%=7;}else if((y%100!=0&&y%4==0)||y%400==0){ans+=29%7;ans%=7;}else{ans+=28%7;ans%=7;}}ans+=(d-1)%7;ans%=7;return ans;
}
string weekday[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int main(){int y,m,d;cin>>y>>m>>d;cout<<weekday[whatday(y,m,d)]<<endl;return 0;
}

在这里插入图片描述
也可以直接用公式

#include<iostream>
#include<string>
using namespace std;
int whatday(int y,int m,int d){
if(m<=2){m+=12;y--;}//返回正确的日期,用0~6表示 星期 1 - 7return(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
}
string weekday[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int main(){int y,m,d;cin>>y>>m>>d;cout<<weekday[whatday(y,m,d)]<<endl;return 0;
}

在这里插入图片描述
在这里插入图片描述

恋爱纪念日

一对情侣想知道他们第100天、200天 . . .纪念日
输入格式
输入4个整数y,m,d,,k,表示他们在一起的日期,保证是一个1900年1月1日以后的日期,求他们的k(0<=k<=10000)天纪念日。
输出格式
输出格式按照yyy-m-dd的格式输出k天纪念日的日期。月份和天数必须各输出2位。保证最后答案年份不超过4位。
样例输入1

2016 10 1 100

样例输出1

2017-01-09

样例输入2

2017 1 1 10

样例输出2

2017-01-11
#include<stdio.h>
int main(){int y,m,d,k;int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d %d %d %d",&y,&m,&d,&k);for(int i=1;i<=k;i++){if((y%4==0)&&y%100!=0||y%400==0){day[2]=29;}else{day[2]=28;}d++;if(d==day[m]+1){d=1;m++;}if(m==13){m=1;y++;	}}printf("%04d-%02d-%02d",y,m,d);return 0;
}

在这里插入图片描述

节假日

日历有阳历(公历)和明历(农历)之分。每
都有法定节假日,这些分成三类——双休、阳历假日、阴历节假日。
1.双休
1)周六和周日2天
2.阳历节假日
1)元且:阳历每年1月1日,放假1天
2)劳动节:阳历每年5月1日,放假1天
3)国庆节:阳历每年10月1日,放假3天
4)圣诞节:阳历每年12月25日,放假1天
3.阴历节假日
1)春节:阴历每年1月1日,放假3天
2)清明节:阳历每年4月4-6日之间的某天,放假1天
3)端午节:阴历每年5月5日,放假1天
4)中秋节:阴历每年8月15日,放假1天
当节假日和双体重合时,双休不延后也不提前,保证节假日之间不会重合。现在给你属年的所有明历节假日的阳历日期,以及当年的1月1日是星期几,请你计算出这一年(阳历1月日到12月31日)放了多少天假(包括双休、阳历节假日和明历节假日)。
输入格式
第一行输入年份(1900<y≤2050)。
接下来4行,每行输入两个整数m、d.依次表示春节、清明节、端午节和中秋节的阳历日期。最后一行一个整数表示当年1月1号是星期几(一周内的第几天,每周从星期一开始计数,即星期一为第一天)。
输出格式
输出一个整数,表示当年放假的天数。
样例输入1

2017
1 28
4 4
5 30
10 4
7

样例输出

113
#include<stdio.h>int mm[10]={1,5,10,10,10,12};int dd[10]={1,1,1,2,3,25};int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};void nextday(int &y,int &m,int &d){d++;if(d==day[m]+1){d=1;m++;}}int main(){int y,w,m,d,sf,ans;scanf("%d",&y);for(int i=6;i<=9;i++){scanf("%d%d",&mm[i],&dd[i]);}scanf("%d",&w);if((y%100!=0&&y%4==0)||y%400==0){day[2]++;}m=1;d=1;sf=0;ans=0;while(m<13){if(m==mm[6]&&d==dd[6]){ans++;sf=2;}else if(sf){ans++;sf--;}else if(w==6||w==7){ans++;}else{for(int i=0;i<10;i++){if(m==mm[i]&&d==dd[i]){ans++;break;}}}nextday(y,m,d);w++;if(w==8){w=1;}}printf("%d\n",ans);return 0;}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/131043.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++视觉处理---cv::Sobel()`算子

cv::Sobel()算子 cv::Sobel()是OpenCV库中的函数之一&#xff0c;用于计算图像的Sobel梯度。Sobel梯度是一种常用的图像处理技术&#xff0c;用于检测图像中的边缘和轮廓。 以下是cv::Sobel()函数的一般用法和参数&#xff1a; void cv::Sobel(cv::InputArray src, //…

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…

实现动态表单的一种思路 | 京东云技术团队

一、动态表单是什么 区别于传统表单前后端配合联调的开发实现方式&#xff0c;动态表单通过一种基于元数据管理的配置化方法来实现表单的动态生成&#xff0c;并能根据配置自由增改删指定字段。实现特定需求的自助化。 图1.1 传统表单前后台协作模式 图1.2 动态表单前后台协作…

计算机竞赛YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快&#xff0c;YOLOv6还没用熟YOLOv7就来了&#xff0c;如果有同学的毕设项目想用上最新的技术&#xff0c;不妨看看学长的这篇文章&#xff0c;学长带大家简单的…

剑指offer——JZ37 序列化二叉树 解题思路与具体代码【C++】

一、题目描述与要求 序列化二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树&#xff0c;不对序列化之后的字符串进行约束&#xff0c;但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉…

【算法|动态规划No.16】leetcode931. 下降路径最小和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

2023年中国医院信息系统发展现状及行业市场规模分析[图]

医院信息系统&#xff0c;亦称“医院管理信息系统”&#xff08;简称HIS&#xff09;&#xff0c;是指利用计算机软硬件技术、网络通信技术等现代化手段&#xff0c;对医院及其所属各部门的人流、物流、财流进行综合管理&#xff0c;对在医疗活动各阶段产生的数据进行采集储存、…

vscode 调试使用 make 编译的项目

1、首先点击运行 --> 启动调试&#xff1a; 2、选择g或gcc生成和调试活动文件&#xff1a; 3、出现下面提示是正常的&#xff0c;点击仍要调试&#xff1a; 点击打开“launch.json”&#xff1a; 4、此时会在项目工作目录下生成tsak.josn和launch.json文件&#xff1a; 如…

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列哈希集合反向思维(或自定义排序) 模拟&#xff0c;请直接看算法思路&#xff1a; 两个哈希集合S1和S2, S1存正面词汇&#xff0c;S2存负面词汇&#xff1b;一个优先队列pq&#xff0c;pq存{score, id}键值对&#xff0c;即学生分数-学生id。 算法流程&#xff1a; 初…

Android 面经总结分享(相当走心)

背景描述 这是来自一位粉丝朋友的面经分享&#xff0c;他在 「Android 开发行业」 摸爬滚打5年多的开发&#xff0c;呆过的互联网公司有三家&#xff0c;均从事的Android 开发的工作。最后离职的一家公司也是做的最久的一家&#xff0c;工作了将近3年多时光。 废话不多说了&a…

山西电力市场日前价格预测【2023-10-12】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-12&#xff09;山西电力市场全天平均日前电价为506.23元/MWh。其中&#xff0c;最高日前电价为841.91元/MWh&#xff0c;预计出现在18: 30。最低日前电价为351.76元/MWh&#xff0c;预计…

1600*A. Maze(DFS)

Problem - 377A - Codeforces 解析&#xff1a; 对于正向思考比较复杂的题目&#xff0c;我们可以反向思考。 由于最后剩余的 “ . ” 必须相连&#xff0c;所以我们将所有 “ . ” 全部换成 “ X ”&#xff0c;然后从其中DFS一个联通的“ X ”反向换成 “ . ”即可。 #incl…