蓝桥杯 字符串和日期

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

  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.rhkb.cn/news/150861.html

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

相关文章

【动手学深度学习】课程笔记 00-03 深度学习介绍及环境配置

目录 00-01 课程安排 02 深度学习介绍 深度学习实际应用的流程 完整的故事 03 环境配置 00-01 课程安排 1. 学习了这门课&#xff0c;你将收获什么&#xff1f; 深度学习的经典和最新模型&#xff1a;LeNet&#xff0c;ResNet&#xff0c;LSTM&#xff0c;BERT&#xff1…

Covert Communication 与选择波束(毫米波,大规模MIMO,可重构全息表面)

Covert Communication for Spatially Sparse mmWave Massive MIMO Channels 2023 TOC abstract 隐蔽通信&#xff0c;也称为低检测概率通信&#xff0c;旨在为合法用户提供可靠的通信&#xff0c;并防止任何其他用户检测到合法通信的发生。出于下一代通信系统安全链路的强烈…

java 汽车修理厂修配厂-接单-处理收款 日常经营管理系统 汽车修理信息管理

实现修配厂一体化管理&#xff0c;从业务各个环节整体管理&#xff0c;包括接待&#xff0c;维修&#xff0c;采购&#xff0c;质检&#xff0c;交车&#xff0c;收款等业务操作环节&#xff0c;全方位&#xff0c;闭环管理&#xff0c;精细化管理。充费利用信息技术资源&#…

基于虚拟同步发电机的孤岛逆变器控制策略(孤岛VSG)(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

python入门篇07-数据容器(序列 集合 字典,json初识)基础(下)

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文传送门 2. python基础使用2.1 序列2.1.1 序列定义2.1.2 序列参数解释2.1.3 列表list切片2.1.4 元组tuple切片2.1.5 字符串str切片 2.2 集合定义2.2.1 set集合-基本语法2.2.2 set集合-添加元素.add()2.2.3 set集合- 移除元…

51单片机+EC11编码器实现可调参菜单+OLED屏幕显示

51单片机+EC11编码器实现可调参菜单+OLED屏幕显示 📍相关篇《stc单片机使用外部中断+EC11编码器实现计数功能》 🎈《STC单片机+EC11编码器实现调节PWM输出占空比》 🌼实际操作效果 🍁整个项目实现框架: 📓EC11接线原理图: 📓项目工程简介 📝仅凭借一个EC11编…

小谈设计模式(23)—桥接模式

小谈设计模式&#xff08;23&#xff09;—桥接模式 专栏介绍专栏地址专栏介绍 桥接模式主要角色抽象部分实现部分分析 核心思想应用场景123 优缺点分析优点123 缺点12 总结 专栏介绍 专栏地址 link 专栏介绍 主要对目前市面上常见的23种设计模式进行逐一分析和总结&#x…

tcpdump(二)命令行参数讲解(一)

一 tcpdump实战详解 1、我们做抓包,一般都需要指定条件,保证对系统的CPU、内存、磁盘资源不会产生过大的响应备注&#xff1a; 遇到过tcpdump持续抓包导致系统挂了2、条件&#xff1a;1) tcpdump的 基础命令选项参数2) 真正的 过滤条件 ① 参数学习思路 思路&#xff1a;…

32、Flink table api和SQL 之用户自定义 Sources Sinks实现及详细示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

使用Spring Initailizr功能~

Spring Initializr是一个用于快速生成Spring Boot项目的在线工具&#xff0c;它允许用户选择所需的Spring Boot版本、添加所需的依赖&#xff0c;并生成一个可用的项目结构&#xff0c;包括基本的配置文件和代码框架&#xff0c;它能够简化Spring Boot项目的初始化过程&#xf…

在win10里顺利安装了apache2.4.41和php7.4.29以及mysql8.0.33

一、安装apache和php 最近在学习网站搭建。其中有一项内容是在windows操作系统里搭建apachephp环境。几天前根据一本书的上的说明尝试了一下&#xff0c;在win10操作系统里安装这两个软件&#xff1a;apache2.4.41和php7.4.29&#xff0c;安装以后apche能正常启动&#xff0c;…

【LeetCode刷题笔记】排序

905. 按奇偶排序数组 解题思路&#xff1a; 1&#xff09;额外数组 两次遍历&#xff0c;第一遍将所有的 偶数 放到结果数组 res 的前面&#xff0c;第二遍将所有的 奇数 接着放到结果数组 res 的后面。也可以使用 对撞指针 往结果数组里存&#xff0c;在 一次遍历 内搞定。 2…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 八)

其他状态管理概述 除了前面章节提到的组件状态管理和应用状态管理&#xff0c;ArkTS还提供了Watch和$$来为开发者提供更多功能&#xff1a; Watch用于监听状态变量的变化。$$运算符&#xff1a;给内置组件提供TS变量的引用&#xff0c;使得TS变量和内置组件的内部状态保持同步…

【Overload游戏引擎分析】画场景栅格的Shader分析

Overload引擎地址&#xff1a; GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后&#xff0c;场景视图中有栅格线&#xff0c;这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现&#xff0…

Maven 编译速度慢?使用一个小技巧提升 Maven 编译速度!

最近在工作中使用 Maven 编译 Java 项目&#xff0c;但是使用 Maven 编译并安装&#xff0c;平均耗时 6 分钟以上。 为了提升工作效率&#xff0c;我们可以通过设置 Maven 编译参数来提升 Maven 的编译速度。 打开 IDEA Maven 界面&#xff0c;设置参数 Thread count 为 2C&a…

【算法小课堂】二分查找算法

简单思路&#xff1a; 当我们要从一个序列中查找一个元素的时候&#xff0c;最快想到的方法就是顺序查找法&#xff08;即&#xff1a;从前到后依次查找&#xff09;。但这种方法过于无脑&#xff0c;就是暴力的把每个元素都排查一遍。元素个数少的时候还行&#xff0c;一旦元…

3D孪生场景搭建:3D漫游

上一篇 文章介绍了如何使用 NSDT 编辑器 制作模拟仿真应用场景&#xff0c;今天这篇文章将介绍如何使用NSDT 编辑器 设置3D漫游。 1、什么是3D漫游 3D漫游是指基于3D技术&#xff0c;将用户带入一个虚拟的三维环境中&#xff0c;通过交互式的手段&#xff0c;让用户可以自由地…

11个在线免费调整图像大小而不会降低质量工具

图片对于增强您的网站、博客和其他在线平台的视觉效果非常重要&#xff0c;而这些图片的正确尺寸在这里起着重要作用。如果您有多种尺寸的图像并且想要调整为一个尺寸&#xff0c;可以使用多种在线图像调整工具。使用在线工具&#xff0c;没有软件下载或安装的麻烦&#xff0c;…

解决SpringBoot Configuration Annotation Processor not configured

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 问题描述 在使用ConfigurationProperties注解和EnableConfigurationProperties注解时&#xff0c;IDEA报错&#xff1a;SpringBoot Configuration Annotation Processor no…

JVM篇---第八篇

系列文章目录 文章目录 系列文章目录一、虚拟机为什么使用元空间替换了永久代?二、什么是Stop The World ? 什么是OopMap?什么是安全点?三、说一下JVM 的主要组成部分及其作用?一、虚拟机为什么使用元空间替换了永久代? 「什么是元空间?什么是永久代?为什么用元空间代…