Forever Young

洛谷 P1098 字符串的展开

洛谷 P1098 字符串的展开

传送门

I'm here!


思路

大暴力字符串题
这个题让我们展开一个字符串\(某字符-某字符\),并且有三个参数对应几种不同的输出方式,首先想到打暴力,因为串特别小,最多才\(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\)
美妙的AC之路


代码

#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;
}

蒟蒻只能讲到这个地步了,真的没法再详细了.......

posted @ 2019-05-21 15:16  Loceaner  阅读(262)  评论(0编辑  收藏  举报