2224: 删除字符串中间的*
输入一个字符串,将串前和串后的*保留,而将中间的*删除。
输入
一个含*的字符串。
输出
删除了串中的*的字符串。
#include
using namespace std;
int main()
{
string s,s2;
int head=0,tail=0;//串首和串尾*位置
getline(cin,s);
for(int i=0;i
{
if(s[0]=='*')
if(s[i]=='*'&&s[i+1]!='*')
if(!head)//判断是不是串首*
{
head=i+1;
break;
}
else
break;
}
for(int i=s.size()-1;i>=0;i--)//查找串尾*
{
if(s[s.size()-1]=='*')
if(s[i]=='*')
{
tail=s.size()-i;
}
else
break;
}
if(head==tail&&head==s.size())//整个字符串全部是*,直接输出
cout<
else
{
for(int i=1;i<=head;i++) //原字符串首空格先复制到s2中
s2=s2+"*";
for(int i=0;i
if(s[i]!='*')
s2=s2+s[i];
for(int i=1;i<=tail;i++) // //原字符串尾空格复制到s2中
s2=s2+"*";
}
cout<
return 0;
}
1871: [一维数组]统计字母
题目描述
统计一个英文句子中每个字母出现的个数。句子以'*'作为结束标志。
输入
一行英文
输出
按英文字母顺序分别输出每个字母的个数(若是0个就不用输出)
#include
using namespace std;
int main()
{
string s;
int a[27]={0};
getline(cin,s);
for(int i=0;s[i]!='*';i++)
{
if(s[i]=='*')
break;
for(int j=0;j<=25;j++)
{
if(s[i]=='A'+j)
{
a[j]++;
break;
}
}
}
for(int i=0;i<=25;i++)
{
if(a[i]!=0)
{
cout<cout<
}
}
return 0;
}
1461: [一维数组基础]查找支撑数
题目描述
在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗?
数据有问题,25%错误是正常
输入
第一行为整数m,表示输入的整数个数。( 3<= m <=100 )
第二行为m个整数。
输出
输出一行,包含若干个支撑数,以空格隔开。
#include
using namespace std;
int main()
{
int i,j=0,m,a[100],b[100];
cin>>m;
for(i=0;i
{
cin>>a[i];
}
for(i=1;i
{
if(a[i-1]a[i+1])
{
b[j]=a[i];
j++;
}
}
for(i=0;i
cout<
return 0;
}
1746: 判断回文数
输入
输入文件仅有一行包含一个正整数n,n为longint类型的数,不超过2000000000。
输出
输入文件仅有一行,如果从输入文件读入的数是回文数则输出“Yes”,否则输出将这个数的数字按相反的顺序重新排列后的数。
#include
using namespace std;
int main()
{
long long a,i,ne=0;
cin>>a;
i=a;
while(a)
{
ne=ne*10+a%10;
a=a/10;
}
if(i==ne)
cout<
else
cout<
return 0;
}
1918: 回文串二
题目描述
读入一行字符,以#结束。这些字符只包含大写字母、小写字母和数字,总长度不超过10000,判断该字符串是否是“回文字符串”。如果是,则输出一个yes,否则输出一个no。
注意:本题中的#只是一个结束符,不包括在字符串内。同时,本题要严格区分大写字母和小写字母。
#include
using namespace std;
//方法1:首尾逐字符比较
int main()
{
string olds;
int i,l;
getline(cin,olds);
l=olds.size()-1;
for(i=0;i
{
if(olds[i]!=olds[l-i-1])
{
cout<
return 0;
}
}
cout<
return 0;
}
//方法2 系统函数翻转
int main()
{
string s1,s2;
int i,l;
getline(cin,s1);
l=s1.size();
s1.erase(s1.end()-1,s1.end());
s2=s1;
reverse(s2.begin(),s2.end());
if(s2==s1)
cout<
else
cout<
return 0;
}
蓝桥杯真题
水下探测器
水下探测器可以潜入湖中在任意水深进行科学探索。
湖水的最大深度为 h 米,即它在湖底时到水面的距离,0<=h<=100;
探测器最初的水下深度为 s 米,0<=s<=100;
当探测器不在水面(当前深度大于 0)时,每个 u 指令可使它上浮 1 米,而当探测器在水面时,u 指令是无效的;
当探测器不在湖底(当前深度小于 h)时,每个 d 指令可使它下沉 1 米,而当探测器在湖底时,d 指令是无效的;
在执行到无效指令时,探测器不做任何操作而继续执行下一指令。
编程实现:
根据给定的 h、s 和一个指令序列(由字符 u、d 组成的字符串,长度不超过 100),求出执行完整的指令序列后,探测器的水下深度。
输入:
第一行:h 和 s,以空格分开。0<=s<=h<=100
第二行:长度不超过 100 的指令字符串,串中仅包含字母 u 或 d
输出:
代表探测器在执行指令后的水下深度的数字。
样例输入:
9 1
uduudd
样例输出:
2
样例数据分析:
水深9米,探测器在水下1米处,
字符u代表向上1米,探测器上浮到0米处
字符d代表向下1米,探测器下沉到1米处
字符u代表向上1米,探测器上浮到0米处
字符u代表向上1米,探测器已经在水面,不能上浮,依然在0米处
字符d代表向下1米,探测器下沉到1米处
字符d代表向下1米,探测器下沉到2米处
最终结果为2
考察知识:
基础语法,字符串,循环,条件判断
参考代码: #include
using namespace std;
int main(){
int h,s;
string str;
cin>>h>>s>>str;
for(int i=0;i
if(str[i]=='u'){
if(s>0){
s--;
}
}else{
if(s
s++;
}
}
}
cout<
}