蓝桥杯 字符串和日期

news2024/11/25 11:03:49

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

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

那么,对于如下的图形:

  A
 BBB
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

  A
 BBB
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的时候,编出:

     A
    ABA
   ABCBA
  ABCDCBA
 ABCDEDCBA
ABCDEFEDCBA
 

输入是3的时候,输出:

  1
 121
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就不用-1
	int 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 - 7
	int 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 - 7
	return(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.coloradmin.cn/o/1071084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9 家用热水器用户行为分析与事件识别

第9章 家用热水器用户行为分析与事件识别 9.1 了解家用热水器用户行为分析的背景与步骤9.1.1 热水器采集数据基本情况9.1.2 熟悉家用热水器用户行为分析的步骤与流程 9.2 预处理热水器用户用水数据9.2.1 删除冗余特征9.2.2 划分用水事件9.2.3 确定单次用水事件时长阈值9.2.4 代…

C++并发与多线程(4) | 传递临时对象作为线程参数的一些问题Ⅰ

一、陷阱1 写一个传递临时对象作为线程参数的示例: #include <iostream> #include <vector> #include <thread> using namespace std;void myprint(const int& i, char* pmybuf) {cout << i << endl;cout << pmybuf << endl;r…

Python 无废话-基础知识列表list详讲

本文详细的介绍了在Python中如何处理list数据类型&#xff0c;涉及了Python 基础知识列表list 详讲&#xff0c;包含list 定义、遍历循环、元素获取、切片、添加、删除、查找元素&#xff0c;以后列表在函数、copy中使用。 列表List数据类型 列表特征 1) 列表中的各个元素&…

06. 机器学习入门2 - 理解特征和向量

文章目录 机器学习初探特征和向量机器学习的通用框架梯度下降 Hi, 你好。我是茶桁。 上一节课&#xff0c;咱们用一个案例引入了机器学习的话题&#xff0c;并跟大家讲了一下「动态规划」。 那这节课&#xff0c;我们要真正进入机器学习。 机器学习初探 在正式开始之前&…

什么是CAS机制?

CAS和Synchronized的区别是什么&#xff1f;适合什么样的场景&#xff1f;有什么样的优点和缺点&#xff1f; 示例程序&#xff1a;启动两个线程&#xff0c;每个线程中让静态变量count循环累加100次。 public class ThreadTest {private static int count 0;public static …

数据统计--图形报表--ApacheEcharts技术 --苍穹外卖day10

Apache Echarts 营业额统计 重点:已完成订单金额要排除其他状态的金额 根据时间选择区间 设计vo用于后端向前端传输数据,dto用于后端接收前端发送的数据 GetMapping("/turnoverStatistics")ApiOperation("营业额统计")public Result<TurnoverReportVO…

CamoDroid 与 Frida Android动态分析工具搭建流程(linux)

CamoDroid 与 Frida Android动态分析工具搭建流程&#xff08;linux&#xff09; 写在前面 这个东西配置起来比较复杂&#xff0c;其实最主要就是配置frida&#xff0c;如果你之前就使用过frida框架的话问题就不是很大 介绍camodroid CamoDroid 是一个开源和开放架构的 And…

图片素材免费下载,高清无水印,无需担心版权问题。

找图片素材就上这8个网站&#xff0c;免费可商用&#xff0c;建议收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要为新手设计师提供免费素材&#xff0c;这些素材的质量都很高&#xff0c;类别也很多&#xff0c;像平面、UI、电商、视频、图片…

JVM命令行监控工具

JVM命令行监控工具 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。 Java作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注&#xff0c;可能…

【Spring MVC研究】MVC如何浏览器请求(service方法)

文章目录 1. DispatcherServlet 的 service 方法1.1. processRequest 方法1.2. doService 方法 背景&#xff1a;平时我们学习 MVC 重点关注的时DispatcherServlet 的 doDispatcher 方法&#xff0c;但是在 doDispatcher 方法之前 还有请求处理的前置过程&#xff0c;这个过程…

B站涨粉,UP主涨粉技巧有哪些?

B 站作为深受年轻人喜爱的社交媒体平台&#xff0c;是一个不断生产优质内容的多元化文化社区&#xff0c;有不少视频出圈。随着视频行业的成熟发展&#xff0c;视频创作者们的竞争愈发激烈&#xff0c;不少创作者有涨粉难&#xff0c;曝光差的困扰。而UP主连续不断的涨粉不仅取…

CS5210芯片设计|CS5210设计方案|HDMI转VGA方案|

CS5210方案应用&#xff0c;CS5210方案设计&#xff0c;HDMI转VGA方案&#xff0c;国产集睿致远研发CS5210 HDMI到VGA转换器结合了HDMI输入接口和模拟RGB DAC输出。支持内部LDO&#xff0c;节省成本&#xff0c;优化电路板空间。CS5210适用于各种市场和显示应用程序&#xff0c…

ToBeWritten之车联网安全中常见的TOP 10漏洞

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

MySql 终端常用指令

一、开发背景 利用数据库实现数据的增删改查 二、开发环境 Window10 mysql-8.0.33-win64 三、实现步骤 1、管理员模式打开终端 2、登录数据库&#xff08;停止 开启 登录&#xff09; 具体指令参考 MySql 安装篇 ​​​​​​​ ​​…

Redis中zSet类型的操作

一、什么是zSet zSet是一种特殊的set集合&#xff0c;它的值不能重复&#xff0c;但会对值进行排序。它有个score值&#xff0c;按照Score值从小到大进行排序。score称为分值&#xff0c;它的值是任意正浮点数。数值越小的排序越靠前。如果score相同&#xff0c;则按值的编…

NPM使用

nodejs 安装查看&#xff1a;windows11 安装Nodejs-CSDN博客 一、初始化项目 1、创建文件夹 E:\vue\projectCode\npm-demo 2、打开cmd 进入E:\vue\projectCode\npm-demo目录输入cmd 点击回车 3、先看看npm命令是否可用 npm -v 4、初始化项目 npm init package name: (npm…

动态内存管理函数(malloc,calloc,realloc,free)

动态内存函数 1.1malloc和free C语言提供了一个动态内存开辟的函数&#xff1a; void* malloc (size_t size); 这个函数向内存申请一块连续可用的空间&#xff0c;并返回指向这块空间的指针。 如果开辟成功&#xff0c;则返回一个指向开辟好空间的指针。如果开辟失败&#…

基于YOLOv8模型的120类狗狗目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的120类狗狗目标检测系统可用于日常生活中检测与定位车辆目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…

CMYK to RGBA

1、 算法原理 我们首先来看算法原理: 显而易见,CMYK是存储起来的四个值,通过变换可以转换成RGBA值,其中A值始终为255 2、原始代码 // The original code uses a macro UNROLL8 to unroll code and // each iteration processes eight pixels. // // The macro actually…

Spring的AOP开发-AOP简介

目录 AOP简介 AOP概念 AOP思想的实现方案 模拟AOP的基础代码 AOP相关概念 AOP简介 AOP概念 AOP&#xff0c;Aspect Oriented Programming&#xff0c;面向切面编程&#xff0c;是对面向对象编程OOP的生化&#xff0c;OOP是纵向对一个事务的抽象&#xff0c;一个对象包括静…