22-23(2)第2次线上赛
2023-04-18 15:51:07 时间
日期-2
跳转链接: 3971:日期-2
要点
- 数组存储每个月对应天数
- 闰年的判断条件:能被400整除或者能被4整除不能被100整除
闰年时二月份为29天,所以一年由365天变为366天
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
//数组存储月份对应的天数
int mm[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(n--)
{
int y,m,r;
scanf("%d%d%d",&y,&m,&r);
if(y%400==0&&y%3200!=0||y%4==0&&y%100!=0) //是闰年
{
mm[2]=29;
printf("%d %d
",366,mm[m]);
}
else
{
mm[2]=28;
printf("%d %d
",365,mm[m]);
}
}
return 0;
}
星号阵列-24
跳转链接: 3993:星号阵列-24
要点
- a=1时是一个尴尬的点,所以干脆写入一个死循环,先打印后判断退出
- 因子:能够整除a的整数(可以为负数),题目划定找到小于a的最大因子
优化寻找最小因子b(这里因子都指大于0):
应该从最小的开始找,因为b是a的因子,那么a/b也是a的因子,这题中因为a的值并不大用a--逐个寻找也可以,但是如果a的数值很大就需要这种优化来提升运行速度了
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a;
scanf("%d",&a);
while(true) //死循环
{
for(int i=0;i<a;i++) printf("*");
puts("");
if(a==1) break; //退出
int b; //因子
for(b=2;b*b<=a;b++)
if(a%b==0) break;
if(a%b==0) a=a/b;
else a=1;
}
}
return 0;
}
名字和成绩
跳转链接: 4027:名字和成绩
要点
sort
函数自定义排序- 扩展:也可以用变量记录更新状态即可
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<string,int> PII; //typedef别名声明
bool mycmp(PII& p1,PII& p2) //自定义排序,取地址避免拷贝速度更快
{
return p1.second>p2.second;
}
int main()
{
vector<PII> vec;
for(int i=0;i<5;i++)
{
string name;
int score;
cin>>name>>score;
vec.push_back({name,score});
}
sort(vec.begin(),vec.end(),mycmp);
cout<<vec[2].first<<" "<<vec[2].second<<endl;
return 0;
}
0和1
跳转链接:4024:0和1
要点
- 常用函数
to_string
位于头文件<string>
中,可以将数值转换成字符串,in、long、double都可以 - 常用函数
find
查找子串
-
find
返回的是unsigned int
无符号正数类型,>=0判断无论如何都会成立。find
是无符号>=右边的0
也是无符号,而find
找不到时返回的是unsigned int
最大值,所以>=0判断永远成立 -
由此我们应该使用
-1
来判断,这样就会将unsigned int
转换成有符号整数 -
等价于-1写法:
string::npos
。npos可以表示string结束位置,即find函数在找不到指定值得情况下会返回string::npos
。
if (s.find("01") !=string::npos|| s.find("10") != string::npos) puts("Yes");
//或者下面这种写法
if (s.find("01") ==string::npos && s.find("10") == string::npos) puts("No");
代码
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
int a, b;
scanf("%d%d", &a, &b);
string s = to_string(a + b);
if (s.find("01") !=string::npos|| s.find("10") != string::npos)
puts("Yes");
else
puts("No");
}
return 0;
}
方法二:字符串流
通过字符串流不仅可以将数值转换为字符串,也可以将字符串转换为数值
#include<iostream>
#include<cstdio>
#include <sstream> //stringstream头文件
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
string str;
stringstream ss; //字符串流
ss<<a+b;
ss>>str;
if(str.find("01")!=-1||str.find("10")!=-1) puts("Yes");
else puts("No");
}
return 0;
}
相关文章
- 爬虫模拟移动
- OS实现智能背景
- 指挥调度解决方案
- 打造自己的 PTM!新词挖掘+预训练
- pandas分析excel数据
- CocoaPods
- CentOS7 部署WordPress
- copykat为什么没有infercnv直观呢
- 扎实形态突破
- Metasploit之社会工程学工具包Set
- 如何高效的在Github上找"轮子"
- 抓包神器Burpsuite保姆级破解及使用指南
- 实现一个简单的类似不蒜子的PV统计器
- 面渣逆袭:HashMap追魂二十三问
- Jupyter Notebook 五大效率插件!
- 这实现牛逼了,原来阮大佬博客的阅读进度功能这么简单
- 树莓派Raspberry Pi 4安装Vulkan
- 树莓派Raspberry Pi 3B+安装OpenCL
- 必须要掌握的 RabbitMQ 操作命令
- 另类玩法!使用 REST API 操作 RabbitMQ