日期格式转换
跳转链接
3962:日期格式转换
要点
- 字符串的整行输入
string类型进行带空格的整行输入使用getline(cin,变量名)
- 多吃一个回车
因为在使用getline整行输入前还需要输入一个整数n,而n后有回车,所以必须把这个回车给"吃掉"
代码
#include<iostream>
#include<cstdio>
using namespace std;
string mm[]={"","Jan.","Feb.","Mar.","Apr.","May","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.","Dec."};
string sp[3];
void split(string s)
{
int x=0;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ') x++;
else if(s[i]==',') continue;
else p[x]+=s[i];
}
}
int find_m(string s)
{
for(int i=1;i<=12;i++)
if(s==mm[i]) return i;
return 0;
}
int main()
{
int n;
scanf("%d",&n);
string temp; //吃掉回车
getline(cin,temp);
while(n--)
{
string s;
getline(cin,s); //整行输入
split(s);
if(find_m(sp[0])) cout<<sp[2]<<"."<<find_m(sp[0])<<"."<<sp[1]<<endl;
else cout<<sp[2]<<"."<<find_m(sp[1])<<"."<<sp[0]<<endl;
for(int i=0;i<3;i++) sp[i]="";
}
return 0;
}
方法二
#include<iostream>
#include<cstdio>
using namespace std;
string m[]={"Jan.","Feb.","Mar.","Apr.","May","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.","Dec."};
int main()
{
int n;
cin>>n;
while(n--)
{
string s1,s2,y;
cin>>s1>>s2>>y;
s2.erase(s2.size()-1,1);
int m1=-1,m2=-1;
for(int i=0;i<12;i++)
{
if(s1==m[i])
{
m1=i+1;
break;
}
else if(s2==m[i])
{
m2=i+1;
break;
}
}
if(m1==-1)
cout<<y<<"."<<m2<<"."<<s1<<endl;
else
cout<<y<<"."<<m1<<"."<<s2<<endl;
}
return 0;
}
姓名顺序
跳转链接
3958:姓名顺序
要点
- 增强for循环
普通for循环for(auto it = v.begin(); it!= v.end(); ++it) 这里的it是指针it->first,auto相当于vector<PSS>::iterator
增强for循环for(auto it:v) 这里的it是容器中的元素it.first
- sort函数加
<algorithm>头文件
!!!经常忘记
代码
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
typedef pair<string,string> PSS;
vector<PSS> v;
bool cmp(PSS p1,PSS p2)
{
string s1=p1.second+" "+p1.first;
string s2=p2.second+" "+p2.first;
return s1<s2;
}
int main()
{
for(int i=0;i<10;i++)
{
string s1,s2;
cin>>s1>>s2;
v.push_back({s1,s2});
}
sort(v.begin(),v.end(),cmp);
for(auto it:v)
cout<<it.first<<" "<<it.second<<endl;
return 0;
}
毕业答辩
跳转链接
3963:毕业答辩
要点
| 优先级 |
分类 |
运算符 |
| 1 |
逗号运算符 |
, |
| 2 |
赋值运算符 |
=、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、 |
| 3 |
逻辑或 |
|| |
| 4 |
逻辑与 |
&& |
| 5 |
按位或 |
| |
| 6 |
按位异或 |
^ |
| 7 |
按位与 |
& |
| 8 |
相等、不等 |
==、!= |
| 9 |
关系运算符 |
<、<=、>、>= |
| 10 |
位移运算符 |
<<、>> |
| 11 |
加法/减法 |
+、- |
| 12 |
乘法/除法/取余 |
*(乘号)、/、% |
| 13 |
单目运算符 |
!、*(指针)、& 、++、–、+(正号)、-(负号) |
| 14 |
后缀运算符 |
( )、[ ]、-> |
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
bool flag2=false;
if((a+b+c)/3.0>=60) flag2=true; //除号优先级大于加号注意需要加括号
int num_fail=0;
if(a<60) num_fail++;
if(b<60) num_fail++;
if(c<60) num_fail++;
if(flag2&&num_fail<=1) puts("Yes");
else puts("No");
}
return 0;
}
伪素数-2
跳转链接
3959:伪素数-2
要点
- 踩了一个大大滴坑找了很久很久都没找出来😭😭
看题!!这个数字本身不是素数,通过排列后是素数那么才是伪素数,如果本来就是素数那么肯定不是伪素数
- 可以自己递归写全排列,更建议用
next_permutation函数
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
const int N=10;
char c[N];
bool isprime(int v)
{
if(v==1) return false;
for(int i=2;i*i<=v;i++)
if(v%i==0) return false;
return true;
}
int main()
{
int x;
cin>>x;
if(isprime(x))
cout<<"NO";
else
{
string s=to_string(x);
for(int i=0;i<s.size();i++)
c[i]=s[i];
sort(c,c+s.size());
do
{
int v=0,dex=0;
while(dex<s.size()&&c[dex]=='0') dex++;
for(;dex<s.size();dex++)
v=v*10+(int)(c[dex]-'0');
if(isprime(v))
{
cout<<"YES";
return 0;
}
}while(next_permutation(c,c+s.size()));
cout<<"NO";
}
return 0;
}