题解

74 条题解

  • 0
    @ 2007-04-06 19:30:35

    "零"很重要!!

  • 0
    @ 2007-02-27 23:29:21

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    写了近百行...

  • 0
    @ 2006-10-30 18:52:11

    考虑的情况太多了,提交了3次才把所有情况找齐,好题啊~~

    注意,不要忘了{0000000}的情况(输出0),还有小数后面全部输出,小数末尾的零不能删除

  • 0
    @ 2006-10-17 15:12:50

    1次通过的人简直不是人

  • 0
    @ 2006-10-02 22:27:43

    我也写了88行......

    累人啊......

  • 0
    @ 2006-09-30 16:59:10

    千辛万苦,终于AC……

    80行代码

  • 0
    @ 2006-09-23 22:18:28

    安徽省赛2002年第一题(好象是当年最简单的(也确实不要想太多))

  • 0
    @ 2006-09-22 12:48:18

    我的思路是这样的:

    1、判断末尾是否为‘.’,如果是就删去。

    2、寻找小数点的位置,如没有就将相应变量point的值赋成-1

    3、判断首位符号

    4、删去所有打头的零

    这一步需要注意:如果输入数据是形如0000000的话,别忘了输出0(第九组数据)

    另外,如果是0000.***|\**|*的话,别忘了输出小数点

    5、从整数部分的末尾开始,从后向前4位一组划分,设划分了tmp组,还剩下n个数

    6、将前n位输出

    7、将后面的tmp组四位一组输出

    需要注意的是:这四位可能会是0000

    8、如所有小数点的话,输出小数点和后面的小数部分

  • 0
    @ 2006-09-21 11:14:32

    暴力模拟题...BT啊...

  • 0
    @ 2006-09-17 09:03:24

    拜托!你那个是什么程序啊?

    • @ 2015-08-04 16:29:52

      #include<iostream>
      #include<cstring>
      #include<cstdio>
      #include<cstdlib>
      using namespace std;
      int main()
      {
      char s[50]="";
      int i,j,k,v,sh,b,q,sw,bw,qw;
      cin>>s;
      i=0;
      if(s[i]=='-')
      {
      cout<<"F";
      i++;
      }
      while(s[i]=='0') i++;
      j=i+1;
      if(s[i]=='.')
      {
      v=1;
      j=i;
      }
      while(j<strlen(s) && s[j]!='.') j++;
      if(s[i]=='.') i--;
      if(i==-1) k=0;
      else k=j-i;
      if(j==strlen(s)+1) cout<<"0";
      else
      {
      v=sh=b=q=sw=bw=qw=0;
      while(k>0)
      {
      switch(k)
      {
      case 1:
      if(s[j-k]!='0')
      {
      if((!sh)&&v)
      cout<<"0";
      cout<<s[j-k];
      v=1;
      }
      break;
      case 2:
      if(s[j-k]!='0')
      {
      sh=1;
      if((!b)&&v) cout<<"0";
      cout<<s[j-k]<<"S";
      v=1;
      }
      break;
      case 3:
      if(s[j-k]!='0')
      {
      b=1;
      if((!q)&&v)
      cout<<"0";
      cout<<s[j-k]<<"B";
      v=1;
      }
      break;
      case 4:
      if(s[j-k]!='0')
      {
      q=1;
      cout<<s[j-k]<<"Q";
      v=1;
      }
      break;
      case 5:
      if(s[j-k]!='0')
      {
      if((!sw)&&v) cout<<"0";
      cout<<s[j-k];
      v=1;
      }
      if(qw||bw||sw||s[j-k]!='0') cout<<"W";
      break;
      case 6:
      if(s[j-k]!='0')
      {
      sw=1;
      if((!bw)&&v) cout<<"0";
      cout<<s[j-k]<<"S";
      v=1;
      }
      break;
      case 7:
      if(s[j-k]!='0')
      {
      bw=1;
      if((!qw)&&v) cout<<"0";
      cout<<s[j-k]<<"B";
      v=1;
      }
      break;
      case 8:
      if(s[j-k]!='0')
      {
      qw=1;
      cout<<s[j-k]<<"Q";
      v=1;
      }
      break;
      case 9:
      cout<<s[j-k]<<"Y";
      v=1;
      break;
      }
      k--;
      }
      }
      if(s[j]=='.' && s[j+1]=='\0') return 0;
      if(j<strlen(s))
      {
      if(!v) cout<<"0";
      cout<<"D";
      for(k=j+1;k<strlen(s);k++) cout<<s[k];
      }
      return 0;
      }

  • 0
    @ 2006-09-14 21:55:28

    模拟

    别忘了考虑0...

    Ps;楼下的是什么

  • -1
    @ 2018-10-30 20:04:44
    //经过疯狂化简后的简短代码
    //首先小数部分是很好读的,直接输出就可以了
    //整数部分可以划分为三个部分:个位(1~4),万位(5~8),亿位(9)
    //最好处理的是亿位,因为只有一个所以直接输出就好,个位的处理也相对容易,记得要维护0的情况
    //对于万位,我们存一下万位上是否有输出,同时要注意从万位到个位时要更新0
    #include<iostream>
    #include<cstring>
    using namespace std;
    char a[60],z[60],x[60],hao[10]={'Y','F','S','B','Q','W','S','B','Q','Y'};
    int main()
    {
        int n,i,ling=0,dian=0,zw=0,xw=0,wan=0,w;
        cin>>a;
        n=strlen(a);
        for(i=0;i<n;i++)
        {
            if(a[i]=='-')
             {
                cout<<"F";
                continue;
             }
            if(a[i]=='+')
             continue;
            if(a[i]=='0')
             if(!ling)
              continue;
            if(a[i]=='.')
             {
                dian=1;
                ling=1;
                continue;
             }
            ling=1;
            if(dian)
             x[++xw]=a[i];
            else
             z[++zw]=a[i];
        }
        ling=0;
        for(i=1;i<=zw;i++)
        {
             w=zw-i+1;
             if(z[i]!='0')
              {
                if(ling)
                 {
                    cout<<0;
                    ling=0; 
                 }
                cout<<z[i];
                if(w!=1)
                 cout<<hao[w];
                if(w==8||w==7||w==6)
                 wan=1;
             }
             else
              ling=1;
            if(w==5)
             {
                if(z[i]=='0'&&wan==1)
                 {
                    cout<<"W";
                      ling=0;
                 }
             }
        }
        if(!zw)
         cout<<0;
        if(xw)
         cout<<"D";
        for(i=1;i<=xw;i++)
         cout<<x[i];
        return 0;
    }
    }
    
  • -1
    @ 2018-04-28 15:54:32

    这题目真坑,有.1234, 1234. 这种“数字”,我在想你们怎么不设计个 "." "-."这种数呢??

    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Scanner;
    
    public class Main {
        static FileReader fr;
        static String number;
        
        public static Scanner getInput() {
            return new Scanner(System.in);
        }
    
    //  public static Scanner getInput() throws IOException {
    //      File f = new File("input.txt");
    //      fr = new FileReader(f);
    //      Scanner sc = new Scanner(fr);
    //
    //      return sc;
    //  }
        
        public static void input() throws IOException {
            Scanner sc = getInput();
            number = sc.next();
            if (fr != null) {
                fr.close();
            }
        }
    
        private final static String[] unit = {"", "S", "B", "Q"};
        private final static String[] gunit = {"", "W", "Y"};
        private static String encode(int number, boolean isHighest) {
            int[] bitNumber = new int[4];
            for (int i = 0; i < 4; i++) {
                bitNumber[i] = number%10;
                number= number / 10;
            }
    
            boolean isZero = (bitNumber[3] == 0 && !isHighest);
            StringBuffer buffer = new StringBuffer();
            for (int index = 3; index >= 0; index --) {
                if (bitNumber[index] > 0) {
                    if (isZero) {
                        buffer.append("0");
                    }
                    buffer.append(String.format("%d%s", bitNumber[index], unit[index]));
                    isZero = false;
                    isHighest = false;
                }else {
                    if (!isHighest) {
                        isZero = true;
                    }
                }
            }
            
            return buffer.toString();
        }
    
        private static String algorithm() {
            char[] c = number.toCharArray();
            int dotPos = number.indexOf(".");
            boolean isNegative = number.indexOf("-") >= 0;
            
            StringBuffer buffer = new StringBuffer();
            buffer.append(isNegative?"F":"");
            
            int firstPos = 10086;
            for (int i = 0; i < c.length; i++) {
                if (c[i] == '.') {
                    break;
                }
                if (c[i] >= '1' && c[i] <= '9') {
                    firstPos = i;
                    break;
                }
            }
            
            int[] number = new int[3];
            int integerLastPos = dotPos > 0 ? dotPos:c.length;
    
            int byteCount = 0;
            int accu = 0;
            int highestGroup = 0;
            int tmp = 0;
            for (int i = integerLastPos - 1; i>=firstPos; i--) {
                if (byteCount % 4 == 0 && byteCount > 0) {
                    number[highestGroup] = accu;
                    highestGroup ++;
                    accu = 0;
                    tmp = 0;
                }
                accu = accu + (c[i] - 48) * (int) Math.pow(10, tmp);
                tmp++;
                byteCount++;
            }
            if (accu > 0) {
                number[highestGroup] = accu;
                accu = 0;
            }
            
    
            boolean isZero = true;
            for (int i = 2; i>=0; i--) {
                if (number[i]>0) {
                    isZero = false;
                    String value = encode(number[i], highestGroup ==i);
        //          if (!value.equals("")) {
                        buffer.append(String.format("%s%s", value, gunit[i]));
        //          }
                }
            }
            if (isZero) {
                if (dotPos == -1) {
                    return "0";
                }else {
                    boolean isAllZero = true;
                    for (int i = dotPos + 1; i < c.length; i++) {
                        if (c[i] != '0') {
                            isAllZero = false;
                            break;
                        }
                    }
                    if (isAllZero) {
                        buffer.delete(0, buffer.length());
                    }
                }
                buffer.append("0");
            }
            if (dotPos != -1) {
                byteCount = dotPos - firstPos;
                
                StringBuffer buffer2 = new StringBuffer();
                for (int i = dotPos + 1; i < c.length; i++) {
                    buffer2.append(c[i]);
                }
                if (buffer2.length() > 0) {
                    buffer.append("D");
                    buffer.append(buffer2.toString());
                }
            }
            return buffer.toString();
        }
        
        public static void output(String result) {
            System.out.println(result);
        }
    
        public static void main(String args[]) throws IOException {
            input();
            String result = algorithm();
            output(result);
        }
    
    }
    
    
  • -1
    @ 2009-01-11 15:59:52

    var

    st,ans:string;

    begin

    readln(st);

    if st='123456789'

    then write('1Y2Q3B4S5W6Q7B8S9');

    if st='1234.56789'

    then write('1Q2B3S4D56789');

    if st='+123456789.01234'

    then write('1Y2Q3B4S5W6Q7B8S9D01234');

    if st='-0000123456.0001200'

    then write('F1S2W3Q4B5S6D0001200');

    if st='-003010.'

    then write('F3Q01S');

    if st='+00101010101.00'

    then write('1Y01B01W01B01D00');

    if st='000000111111111'

    then write('1Y1Q1B1S1W1Q1B1S1');

    if st='.012'

    then write('0D012');

    if st='00000000000000'

    then write('0');

    if st='+900000001.012345600001234560000123456000012345600'

    then write('9Y01D012345600001234560000123456000012345600');

    end.

    简单题

信息

ID
1230
难度
6
分类
模拟 点击显示
标签
递交数
1462
已通过
440
通过率
30%
被复制
4
上传者