题解

70 条题解

  • -2
    @ 2016-11-29 00:02:48
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <climits>  
    #include <cmath>
    #include <algorithm>
    #include <functional>
    #include <iterator>
    #include <cstring>
    #include <set>
    #include <vector>
    #include <queue>
    #include <list>
    #include <cctype>
    #include <string>
    
    using namespace std;  
    
    char ss[5000000];  
    
    int main()  
    {  
        while(scanf("%s",ss)!=EOF)  
        {  
            vector<int> a;  
            if(ss[0]=='[')  
            {  
                int len=strlen(ss);               
    
                int k=1;  
                int num=0;  
                while(ss[k]>='0'&&ss[k]<='9')  
                {  
                    num=num*10+(ss[k]-'0');  
                    k++;  
                }  
                a.push_back(num);     //连分数第一个数可以为任意整数,后面的数是0到9之间的
                                      //然而 。。。测试数据的第一个数全部都是0到9之间的。。
                for(int i=k+1;i!=len;i++)  
                {  
                    if(ss[i]>='0'&&ss[i]<='9')  
                    {  
                        num=ss[i]-'0';               
                        a.push_back(num);  
                    }   
                }  
    
                if(a.size()==1)  
                {  
                    printf("%d\n",a.back());      //第一个雷   如果是【2452】 则直接输出 2452
                    continue;  
                }  
    
                int fenmu,fenzi;
                fenzi=0;
                fenmu=1;
                
                while(a.size()!=0)  
                {                  
                    fenzi=a.back()*fenmu+fenzi;
                    a.pop_back();  
                    swap(fenmu,fenzi);
                }
    
                swap(fenmu,fenzi);
                printf("%d/%d\n",fenzi,fenmu);  
            }  
    //___________________________________________________________________      
            else  
            {  
                  
                int i=0;  
                int zuo,you;  
                zuo=you=0;  
    
                while(ss[i]!='/')  
                {  
                    zuo=zuo*10+(ss[i]-'0');  
                    i++;  
                }    
    
                i++;
                while(ss[i])  
                {  
                    you=you*10+(ss[i]-'0');  
                    i++;  
                }  
    
                if(zuo%you==0)  
                {  
                    printf("[%d]\n",zuo/you);     //第二个雷    如果是26/13  这样的直接输出【2】
                    continue;  
                }  
    
                printf("[");    
                printf("%d;",zuo/you); 
    
                zuo=zuo-(zuo/you)*you;  
                swap(zuo,you);
    
                while(1)  
                {  
                    printf("%d",zuo/you);                  
                    if(you!=1&&zuo%you!=0)      //第三个雷  测试数据可能是个假分数!!!    
                    {                           //比如26/8   算一步之后就变成8/2 这时候4已经打印出来了
                        printf(",");            //所以直接打印】结束   zuo%you!=0 非常重要 否则RE
                        zuo=zuo-(zuo/you)*you;
                        swap(zuo,you);
                    }  
                    else {printf("]\n");break;}                                       
                }  
    
            }  
        }  
        return 0;  
    }   
    
    
  • -2
    @ 2016-02-21 11:12:51

    水题,一次AC
    #include <iostream>
    #include<string>
    using namespace std;
    string a, s;
    bool u;
    int b, x, y, i, j, k, p[100], t, o, e,d;
    int main()
    {
    while (cin >> a)
    {
    for (k = 0; k < 10; k++)
    {
    p[k] = 0;
    }
    if (a[0] == '[')
    {
    t = 0;
    for (k = 0; k <a.size(); k++)
    {
    if ((a[k] >= '0') && (a[k] <= '9'))
    {
    u = true;
    p[t] = p[t] * 10 + (int)(a[k] - '0');
    }
    else
    {
    if (u)
    {
    t++;
    }
    u = false;
    }
    }
    t--;
    x = p[t];
    y = 1;
    for (k = t - 1; k >= 0; k--)
    {
    b = x;
    x = y + p[k] * x;
    y = b;
    }
    i = x;
    j = y;
    while (x%y != 0)
    {
    t = y;
    y = x%y;
    x = t;
    }
    i = i / y;
    j = j / y;
    if (j == 1)
    cout << i << endl;
    else
    cout << i << '/' << j << endl;
    }
    else
    {
    t = 0;
    for (k = 0; k < a.size(); k++)
    {
    if ((a[k] >= '0') && (a[k] <= '9'))
    {
    p[t] = p[t] * 10 + (int)(a[k] - '0');
    }
    else
    t++;
    }
    if (t == 0)
    cout << '[' << p[0] << ']'<<endl;
    else
    {
    i = p[0];
    j = p[1];
    while (i%j != 0)
    {
    t = j;
    j = i%j;
    i = t;
    }
    p[1] = p[1] / j;
    p[0] = p[0] / j;
    x = p[0];
    y = p[1];
    t = 0;
    cout << '[';
    while (x != 1)
    {
    o = x%y;
    e = x / y;
    if (t == 0)
    cout << e;
    else
    if (t == 1)
    cout << ';' << e;
    else
    cout << ',' << e;
    x = o;
    if (x != 1)
    {
    d = y;
    y = x;
    x = d;
    }
    t++;
    }
    if (y != 0)
    cout << ',' << y;
    cout << ']' << endl;
    }
    }
    }
    return 0;
    }

  • -2
    @ 2009-11-09 21:16:37

    编译通过...

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

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

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

    ├ 测试数据 04:答案错误...程序输出比正确答案长

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

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

    Unaccepted 有效得分:80 有效耗时:0ms

    program p1696;

    var ss:ansistring;

    le,ri:int64;

    aa:array[0..105] of longint;

    function rr(a,s:Longint):longint;

    var d,f:Longint;

    begin

    d:=a mod s;

    while d0 do begin

    a:=s; s:=d;

    d:=a mod s;

    end;

    rr:=s;

    End;

    Procedure doo1;

    var i,n,kon,jj,k,oo:longint;

    begin

    fillchar(aa,sizeof(aa),0);

    delete(ss,1,1);

    delete(ss,length(ss),1);

    kon:=pos(';',ss);

    if kon=0 then begin val(ss,k,oo); write(k,'/1'); end;

    n:=0;

    inc(n);

    val(copy(ss,1,kon-1),aa[n],oo);

    delete(ss,1,kon);

    kon:=pos(',',ss);

    while kon0 do begin

    inc(n);

    val(copy(ss,1,kon-1),aa[n],oo);

    delete(ss,1,kon);

    kon:=pos(',',ss);

    End;

    inc(n);

    val(ss,aa[n],oo);

    {ok}

    le:=aa[n]; ri:=1;

    for i:=n-1 downto 1 do begin

    k:=le; le:=ri; ri:=k;

    inc(le,ri*aa[i]);

    jj:=rr(ri,le);

    le:=le div jj; ri:=ri div jj;

    end;

    writeln(le,'/',ri);

    END;

    PROcedure ddd2;

    var i,n,kon,jj,k,oo:longint;

    begin

    fillchar(aa,sizeof(aa),0);

    kon:=pos('/',ss);

    val(copy(ss,1,kon-1),le,oo);

    delete(ss,1,kon);

    val(ss,ri,oo);

    n:=1;

    aa[n]:=le div ri;

    le:=le mod ri;

    if le=0 then write('[0;]');

    while le1 do begin

    k:=le; le:=ri; ri:=k;

    inc(n);

    aa[n]:=le div ri; le:=le mod ri;

    jj:=rr(ri,le);

    le:=le div jj; ri:=ri div jj;

    ENd;

    inc(n); aa[n]:=ri;

    write('[',aa[1],';',aa[2]);

    for i:=3 to n do

    write(',',aa[i]);

    writeln(']');

    End;

    BEGIN

    while not eof do begin

    readln(ss);

    if pos('[',ss)=0 then ddd2

    Else doo1;

    End;

    end.

    人笨就是悲哀!!

  • -2
    @ 2009-11-08 10:47:14

    编译通过...

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

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

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

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

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

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

    暴力模拟 AC~

  • -2
    @ 2009-11-07 01:55:25

    岛儿的生日比赛第一题

    我猜是数学题……

  • -2
    @ 2009-11-07 01:18:21

    板凳。

  • -2
    @ 2009-11-05 21:26:43

    沙发啊...

  • -3
    @ 2016-04-14 17:56:52

    我的ac率

  • -3
    @ 2009-11-10 14:04:29

    水题,模拟,1次AC。

    我没有加任何约分的处理都AC了,这让我们深深地了解到出题人是多么阴险!

    我的方法分子为1退出没有任何问题。

  • -3
    @ 2009-11-09 09:29:15

    呃 果然 好阴险

信息

ID
1696
难度
7
分类
其他 | 数学模拟 点击显示
标签
递交数
5158
已通过
1140
通过率
22%
被复制
3
上传者