模拟类

模拟类题目没有太多的算法和思考,题目会将所有的条件都写明,只需按照题目的要求一一实现即可,但会有很多的细节,这也是这类题目容易失分的原因,模拟类题目的特点就是废话多,题目长,代码繁。
做这类题目,首先要保证读懂题目,否则就直接放弃吧,要先在脑子里想好方案,然后再用代码实现,敲代码前要胸有成竹,另外,要注意细节,捕捉题目中的重点,不要漏条件,这是100分和30分的区别啊。如果你打一道模拟题调了很久都没有结果,那么不如重打,打100多行的代码会比调试100多行的代码快,更容易找出错误。举一例子:

字符串展开

题目大意:根据以下规则展开字符串:
(1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。
(2)参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字子串,都用与要填充的字母个数相同的星号“ * ”来填充。
(3)参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两侧的字符不变。
(4)参数p3:是否改为逆序:p3=1表示维持原有顺序,p3=2表示采用逆序输出,注意这时仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。
(5)如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。
明显的模拟题,条件一应俱全,不用算法,代码实现即可,这道题的读入和输出都很简单,可以展开时直接输出,也可以先存起来再输出,我选择前者。
这道题细节也比较多,首先要判断是否是‘-’,然后注意特殊的:‘-’前后不都是数字或不都是字母,前后相同或前大后小,特判完就展开其他,处理好细节就没问题。
代码如下:

#include<bits/stdc++.h>
using namespace std;
int p1,p2,p3;
string s;
char r,l;
bool chr(char a)//判断是否是字母
{
    if(a>='a'&&a<='z')
     return true;
    else
    return false;
} 
bool num(char b)//判断是否是数字
{
    if(b>='0'&&b<='9')
     return true;
    else
    return false;
}
bool f(char x,char y)//判断前后是否同一类型
{
    if(chr(x)&&chr(y))
     return true;
    if(num(x)&&num(y))
     return true;
    return false;
}
int main()
{
    cin>>p1>>p2>>p3;
    cin>>s;
    cout<<s[0];
    for(int i=1;i<=s.size()-2;i++)//首个字符和最后的字符必不用处理,直接输出,循环次数减2
    {
        if(s[i]=='-')
        {
            if(f(s[i-1],s[i+1])&&s[i-1]<s[i+1])//如果前后类型相同则可以展开
            {
                l=s[i-1];
                r=s[i+1];
                if(p1==2)//是否需要大写
                 if(chr(s[i-1]))
                {
                    l=l+'A'-'a';
                    r=r+'A'-'a';
                }
                if(p3==1)//顺序输出
                {
                    for(char j=l+1;j<=r-1;j++)
                     for(int k=1;k<=p2;k++)
                      if(p1==3)
                       cout<<'*';
                      else
                       cout<<j;
                } 
                else
                {
                    for(char j=r-1;j>=l+1;j--)//逆序输出
                     for(int k=1;k<=p2;k++)
                      if(p1==3)
                       cout<<'*';
                      else
                       cout<<j; 
                }
            }
            else
            cout<<'-';//不是同类型无法展开输出'-'
        } 
        else
        cout<<s[i]; //不用进行处理,输出原有字符
    } 
    cout<<s[s.size()-1]<<endl;
    return 0;
}
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 4 实验2 一个简单的Java Applet程序 4 实验3 联合编译 5 上机实践2 基本数据与控制语句 6 实验1 输出希腊字母表 6 实验2 回文数 6 实验3 猜数字游戏 8 上机实践3 与对象 9 实验1 三角形、梯形和圆形的封装 9 实验2 实例成员成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String的常用方法 19 实验2 比较日期的大小 21 实验3 处理大整数 22 上机实践6 组件及事件处理 23 实验1 算术测试 23 实验2 信号灯 25 实验3 布局与日历 28 上机实践7 组件及事件处理2 31 实验1 方程求根 31 实验2 字体对话框 34 实验3 英语单词拼写训练 37 上机实践8 多线程 41 实验1 汉字打字练习 41 实验2 旋转的行星 43 实验3 双线程接力 47 上机实践9 输入输出流 50 实验1 学读汉字 50 实验2 统计英文单词字 53 实验2 读取Zip文件 56 上机实践10 Java 中的网络编程 57 实验1 读取服务器端文件 57 实验2 使用套接字读取服务器端对象 59 实验3 基于UDP的图像传输 62 上机实践11 数据结构 66 实验1 扫雷小游戏 66 实验2 排序与查找 70 实验3 使用TreeSet排序 72 上机实践12 java Swing 74 实验1 JLayeredPane分层窗格 74 实验2 使用表格显示日历 75 实验3 多文档界面(MDI) 78 上机实践1 初识Java 实验1 一个简单的应用程序 2.模板代码 Hello.java package 实验一; public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("你好,很高兴学习Java"); //命令行窗口输出"你好,很高兴学习Java" A a=new A(); a.fA(); } } class A { void fA() {System.out.println("we are student"); } } 实验2 一个简单的Java Applet程序 2.模板代码 FirstApplet.java import java.applet.*; import java.awt.*; public class FirstApplet extends Applet { public void paint(Graphics g) { g.setColor(Color.blue); g.drawString("这是一个Java Applet 程序",10,30);//在Java Applet中绘制一行文字:“这是一个Java Applet 程序” g.setColor(Color.red); g.setFont(new Font("宋体",Font.BOLD,36)); g.drawString("我改了字体",20,50);//在Java Applet中绘制一行文字:“我改了字体” } }实验3 联合编译 2.模板代码 public class MainClass { public static void main (String args[ ]) { System.out.println("你好,只需编译我") ; //命令行窗口输出"你好,只需编译我" A a=new A(); a.fA(); B b=new B(); b.fB(); } } public class A { void fA() {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值