zoukankan      html  css  js  c++  java
  • 洛谷 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;
    }
    

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

  • 相关阅读:
    巧用border效果
    移动端页面无刷新跳转方法有三种
    word-break和word-wrap的使用和区别
    动态获取移动端视宽,从而结合rem达到适配
    一步一步学习IdentityServer4 (3)自定登录界面并实现业务登录操作
    一步一步学习IdentityServer3 (15) 授权模式那些事
    一步一步学习IdentityServer4 (2) 开始一个简单的事例
    一步一步学习IdentityServer4 (1) 概要配置说明
    Owin 自定义中间件(2)中间件进阶
    一步一步学习IdentityServer3 (14) 启用Https
  • 原文地址:https://www.cnblogs.com/loceaner/p/10899976.html
Copyright © 2011-2022 走看看