洛谷 P1098 字符串的展开
传送门
思路
大暴力字符串题
这个题让我们展开一个字符串(某字符-某字符),并且有三个参数对应几种不同的输出方式,首先想到打暴力,因为串特别小,最多才(100)
首先输入三个参数,之后输入一个字符串,按照题目要求进行模拟,一步步打暴力,最终(AC)(不知道为什么我第一次的代码在洛谷能得(70)分,输出也是对的,但是在老师机子上测却是(0)分)
下面详讲一下我的暴力程序:
(p1)对应三个值,(1)表示填充小写字母,(2)表示填充大写字母(当然都是针对字母),(3)表示填充(ast ast),这就有点棘手了,因为数字没有大写小写啊,所以我们需要判断是数字还是字母,之后再进一步处理
(p2)对应一个值,表示填充字符的数量,所以我们可以套一层循环输出(p2)个需要输出的数
(p3)也是个麻烦,(1)表示顺序输出,(2)表示逆序输出,所以还得加个判断
知道了这些,我们就可以开始一个字符一个字符的循环了(我的暴力程序充分展现了(continue)的作用),首先,只要它不是减号,我们就输出它并(continue),如果它是减号,但是前面后面的字符(ASCII)码的值只差一,就不在输出这个减号,即直接(continue),那么剩下的不是字母就是数字了,所以就开始判断是不是数字,肯定是要从(s[i-1])到(s[i+1])展开的(经过了上面的筛选此时(s[i])一定是个减号)然后优先判断(p1)是不是为(3),如果是就按照要求输出(ast),然后判断(p3)的值,决定逆序还是顺序,直接加一遍关于(p2)的循环输出中间的数即可
字母同是,只不过还要判断小写大写
经过了一系列的摧残与打击之后,能过留下来的便是英雄,我们光荣的直接输出它
记录我美妙的(AC)之路(早早(100)分的那些都不真实(qwq))
代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<stack>
#include<cstdlib>
#define N 511
#define MOD 100000007
#define INF 0x3f3f3f3f
using namespace std;
string s,s1;
int p1,p2,p3;
int len;
int main() {
//freopen("expand.in","r",stdin);
//freopen("expand.out","w",stdout);
scanf("%d%d%d",&p1,&p2,&p3);
cin>>s;
len=s.length();
for(int i=0; i<len; i++) {
if(s[i]!='-') {
cout<<s[i];
continue;
}
if(s[i+1]-s[i-1]==1)continue;
if(s[i-1]>='0'&&s[i-1]<='9'&&s[i+1]>='0'&&s[i+1]<='9') {
if(s[i+1]<=s[i-1]) {
cout<<s[i];
continue;
}
if(p1==3) {
for(int j=s[i-1]+1; j<s[i+1]; j++) {
for(int k=1; k<=p2; k++) {
cout<<"*";
}
}
continue;
}
if(p3==1) {
for(int j=s[i-1]+1; j<s[i+1]; j++) {
for(int k=1; k<=p2; k++) {
cout<<char(j);
}
}
continue;
}
if(p3==2) {
for(int j=s[i+1]-1; j>s[i-1]; j--) {
for(int k=1; k<=p2; k++) {
cout<<char(j);
}
}
continue;
}
}
if(s[i-1]>='a'&&s[i-1]<='z'&&s[i+1]>='a'&&s[i+1]<='z') {
if(s[i+1]<=s[i-1]) {
cout<<s[i];
continue;
}
if(p1==3) {
for(int j=s[i-1]+1; j<s[i+1]; j++) {
for(int k=1; k<=p2; k++) {
cout<<"*";
}
}
continue;
}
if(p3==1) {
if(p1==1) {
for(int j=s[i-1]+1; j<s[i+1]; j++) {
for(int k=1; k<=p2; k++) {
cout<<char(j);
}
}
continue;
}
if(p1==2) {
for(int j=s[i-1]+1; j<s[i+1]; j++) {
for(int k=1; k<=p2; k++) {
cout<<char(j-32);
}
}
continue;
}
}
if(p3==2) {
if(p1==1) {
for(int j=s[i+1]-1; j>s[i-1]; j--) {
for(int k=1; k<=p2; k++) {
cout<<char(j);
}
}
continue;
}
if(p1==2) {
for(int j=s[i+1]-1; j>s[i-1]; j--) {
for(int k=1; k<=p2; k++) {
cout<<char(j-32);
}
}
continue;
}
}
}
cout<<s[i];
}
fclose(stdin);
fclose(stdout);
return 0;
}
蒟蒻只能讲到这个地步了,真的没法再详细了.......