A.素数回文数的个数
求11到n之间(包括n),既是素数又是回文数的整数有多少个。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
bool prime(int x){
for(int i=2;i<=sqrt(x);i++) {
if(x%i==0) return 0;
}
return 1;
}
bool hws(int x){
int t=0,x1=x;
while(x){
t=t*10+x%10;
x/=10;
}
if(x1==t) return 1;
else return 0;
}
int main(){
int cnt=0,n;
cin>>n;
for (int i=11; i<=n; i++) {
if((prime(i))&&hws(i)) { // 如果是素数且是回文数,计数器加1
cnt++;
}
}
cout << cnt;
return 0;
}
B.提取数字串按数值排序
注意初始化num
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
string s;
int temp[10];
int ans[300];
int main(){
cin>>s;
int t=0;
for(int i=0;i<s.size();i++){
int j=0;
while(s[i]>='0'&&s[i]<='9'){
temp[j++]=s[i]-'0';
i++;
}
if(j>0) {
int num=0;
for(int k=0;k<j;k++){
num=num*10+temp[k];
}
ans[t++]=num;
}
}
sort(ans+0,ans+t);
for(int i=0;i<t;i++){
if(i!=0) cout<<",";
cout<<ans[i];
}
if(t==0) cout<<0;
return 0;
}
C.逃离迷宫
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#define MAX 47
using namespace std;
int n,k,sx,sy,ex,ey;
char map[MAX][MAX];
int vist[MAX][MAX];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct Node{
int x,y;
int step;
};
int inMAP(int x,int y){
if(x<0||x>=n||y<0||y>=n)
return 0;
else
return 1;
}
queue<Node>Q;
void bfs(int x,int y){
Node start;
start.x=x;
start.y=y;
start.step=0;
vist[start.x][start.y]=1;
Q.push(start);
while(!Q.empty()){
Node now = Q.front();
Q.pop();
Node next;
for(int i=0;i<4; i++){
next.x=now.x+dx[i];
next.y=now.y+dy[i];
if((map[next.x][next.y]=='.'||map[next.x][next.y]=='E') && !vist[next.x][next.y] && inMAP(next.x,next.y)){
next.step=now.step+1;
vist[next.x][next.y]=1;
Q.push(next);
if(next.x==ex && next.y==ey){
if(next.step<=k) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return ;
}
}
}
}
cout<<"NO"<<endl;
return ;
}
int main(){
int t;
cin>>t;
while(t){
cin>>n>>k;
memset(map,0,sizeof(map));
memset(vist,0,sizeof(vist));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
cin>>map[i][j];
if(map[i][j]=='S') {
sx=i;sy=j;
}
if(map[i][j]=='E') {
ex=i;ey=j;
}
}
bfs(sx,sy);
}
return 0;
}
D.吃奶酪
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
long long d[100005];
int a[100005];
int main(){
int t;
cin>>t;
while(t--){
int n;
memset(d,0,sizeof(d));
memset(a,0,sizeof(a));
cin>>n;
for(int i = 1; i <= n; i++)
cin>>a[i];
d[1] = max(0, a[1]);//
d[2] = max(int(d[1]), a[2]);//
for(int i = 3; i <= n; i++){
d[i] = max(d[i-1], a[i]+d[i-2]);
}
cout<<d[n]<<endl;
}
return 0;
}