问题 A 回文串问题
题目描述:
对于一个串 ABCD,规定可以将左边的一个字符移到右边,得到 BCDA,同理再 操作一次,得到 CDAB。现有一个串 AABB,不是回文串, 但只要将左边的一个字符移到右边,就成为了回文串,同理 BAABC,操作两次,成为回文串。问,给定一个串,经过多次这样的操作 是否能成为回文串。能则输出 Y, 否则输出 N 。
输入格式:
全由大写字母构成的一个串,最多不超过 80 个字符(请使用 scanf("%s", ......)读取)。
输出格式:
Y 或 N
输入样例:
ABC
输出样例:
N
A 题解
#include<stdio.h>
#include<string.h>
int isPalindrome(char *str,int len)
{
for(int i=0;i<len/2;i++)
{
if(str[i]!=str[len-1-i])
{
return 0;
}
}
return 1;
}
//定义一个函数isPlindrome(),用以判断一个字符串是否为回文串
int main(void)
{
char str[81];
scanf("%s",str);
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(isPalindrome(str,len))
{
printf("Y");
return 0;
}
else
{
char first=str[0];
for(int j=0;j<len-1;j++)
{
str[j]=str[j+1];
}
str[len-1]=first;
}
//字符串移位
}
printf("N");
return 0;
}
很基础的一题,但要注意细节。
问题 B 遗忘的密码
题目描述:
小明记不清他的密码了,只记得该密码是一个不大于 100000 的质数,同时记得其中的一段连续的数字,请编程帮他找出所有满足条件的数字,有多个时,按由小到大输出。
如果没有满足条件的数字,则输出 N 。
输入格式:
一个数字字符串(为小明记得的其中一段连续的数字)。
输出格式:
一行一个满足条件的数(由小到大输出) 。
输入样例:
2343
输出样例:
12343
22343
23431
B 题解
C++
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int isPrime(int n)
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0&&n!=2)
{
return 0;
}
}
return 1;
}
int main(void)
{
int n;
int found=0;
string str1;
cin>>n;
str1=to_string(n);
for(int i=2;i<=100000;i++)
{
string str2=to_string(i);
if(str2.find(str1)!=string::npos&&isPrime(i))
{
cout<<i<<endl;
found=1;
}
}
if(!found)
{
cout<<"N";
}
return 0;
}
C
#include<stdio.h>
#include<math.h>
#include<string.h>
int isPrime(int n)
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0&&n!=2)
{
return 0;
}
}
return 1;
}
int main(void)
{
int n;
int found=0;
char str1[100005],str2[100005];
scanf("%d",&n);
sprintf(str1,"%d",n);
for(int i=2;i<=100000;i++)
{
sprintf(str2,"%d",i);
if(strstr(str2,str1)&&isPrime(i))
{
printf("%d\n",i);
found=1;
}
}
if(!found)
{
printf("N");
}
return 0;
}
将整数转换为C-风格字符串,用sprintf()函数;将整数转换为C++ string类字符串,用to_string()函数。C-风格字符串的查找字符串,用strstr();C++ string类字符串的查找字符串,用str.find()函数。
复习了两种字符串(C-风格字符串和C++ string类字符串)的运用。
附:
sprintf()函数原型
int sprintf(char *buffer, const char *format, ...);
strstr()函数原型及要点
char *strstr(const char *str1, const char *str2);
函数会在字符串str1中查找是否包含字符串str2,如果找到则返回指向str2在str1中第一次出现位置的指针;如果没有找到,则返回NULL。
find()(主要的)函数原型及要点
size_t find(const string& str, size_t pos = 0) const;
这个版本的find()函数接受两个参数:要查找的子串(str)和起始位置(pos)。如果未指定起始位置,则默认从字符串的开头开始查找。函数返回找到的子串的起始位置的下标,如果未找到则返回std::string::npos,这是一个特殊的标记,表示没有找到子串。
题目来源
A:2023 年华南农业大学程序设计竞赛网上预赛试题(23 级组别),2.回文串问题
B:2023 年华南农业大学程序设计竞赛网上预赛试题(23 级组别),3.遗忘的密码
标签:string,int,char,密码,字符串,include,回文,遗忘 From: https://blog.csdn.net/xq2024/article/details/143929116