题解

47 条题解

  • 0
    @ 2014-08-07 11:40:39

    /*---------------------------------------------
    5个小时才搞定这坑爹的题啊~写了整整105行
    一开始字符串没处理好,修理了2小时
    后来减法竟然给我弄错了(把 a[i] 的结果记到 a[i-1] 去了)
    最后调试完毕,坐等AC,结果5个点都WA
    发现我竟把毛头的结果输出了!

    发表一下超长题解,无耐心者莫看
    ----------------------------------------------*/
    #include <stdio.h>
    #include <string.h>
    #include <math.h>

    short indexOf(char *str,short index);
    int toInt(char *str);
    void add(char *delta,char *addTo,short pn);
    void slice(char *from,char *to,short begin,short end);

    int main(){
    char problem[200]="",temp[10]="",result[10]="";
    int max,lines,correctAns;
    short i,begin=0,end=0,count=0,flag=1;

    scanf("%d %d",&max,&lines);
    for(i=0;i<lines;i++){
    scanf("%s",problem);
    strcpy(result,"0");
    begin=end=correctAns=0;
    while(problem[begin]!='='){
    flag=1; //positive or negative
    end=indexOf(problem,begin+1); //search for next operator
    if(problem[begin]=='-') //judge p/n
    flag=-1;
    if(begin==0)
    begin--;
    slice(problem,temp,begin+1,end-1); //cut the number from string
    correctAns+=toInt(temp)*flag; //change it into int and add to correct answer
    /*deal with the fool's result*/
    if(toInt(temp)>max || toInt(result)>max){
    strcpy(result,"99999999");
    break;
    }
    add(temp,result,flag==1);
    if(toInt(temp)>max || toInt(result)>max){
    strcpy(result,"99999999");
    break;
    }
    /*end*/
    begin=end;
    }
    if(correctAns==toInt(result))
    count++;
    }
    printf("%d\n",count*1000/lines);
    return 0;
    }
    short indexOf(char* str,short index){
    for(;;index++)
    if(str[index]=='+' || str[index]=='-' || str[index]=='=')
    break;
    return index;
    }
    int toInt(char str){
    int i,base=1,ans=0;
    for(i=strlen(str)-1;i>=0;i--){
    ans+=base
    (str[i]-'0');
    base*=10;
    }
    return ans;
    }
    void add(char *delta,char *addTo,short pn){
    short i,carry,length;
    if(toInt(delta)>10 || toInt(addTo)>10)
    carry=0;
    else
    carry=1;
    length=strlen(delta);
    for(i=length;i>=0;i--)
    delta[i+(9-length)]=delta[i];
    for(i=0;i<9-length;i++)
    delta[i]='0';
    length=strlen(addTo);
    for(i=length;i>=0;i--)
    addTo[i+(9-length)]=addTo[i];
    for(i=0;i<9-length;i++)
    addTo[i]='0';
    for(i=8;i>0;i--){
    delta[i]-='0';
    addTo[i]-='0';
    if(pn){
    if(delta[i]*addTo[i]==3){
    addTo[i]=2;
    }else{
    if(carry)
    addTo[i-1]+=(addTo[i]+delta[i])/10;
    addTo[i]=(addTo[i]+delta[i])%10;
    }
    }else{
    addTo[i-1]--;
    addTo[i-1]+=(addTo[i]+10-delta[i])/10;
    addTo[i]=(addTo[i]+10-delta[i])%10;
    }
    delta[i]+='0';
    addTo[i]+='0';
    }
    }
    void slice(char *from,char *to,short begin,short end){
    short i=0;
    for(;begin<=end;begin++){
    to[i]=from[begin];
    i++;
    }
    to[i]='\0';
    }

    • @ 2017-11-03 09:46:33

      代码不对吧

  • 0
    @ 2012-08-17 14:23:31

    不好意思,前面我发的那个,直接发错了文件,大家无视。。。

    #include

    char trush[3000];

    int max;

    int sum(int pre,int beh)

    {

    int a=pre,b=beh;

    while(a>0&&b>0)

    {

    int x=a%10,y=b%10;

    if((x==1&&y==3)||(x==3&&y==1)||pre+beh>max)return -1;

    a/=10;b/=10;

    }

    if((pre>9||beh>9)&&(pre%10+beh%10>9))return -1;

    return pre+beh;

    }

    int main()

    {

    int tishu;

    scanf("%d %d",&max,&tishu);

    int i,right=0;

    for(i=0;imax)

    {

    scanf("%s",trush);

    continue;

    }

    int flag=1;

    for(;;)

    if((c=getchar())!='=')

    {

    int beh;

    scanf("%d",&beh);

    if(beh>max)

    {

    scanf("%s",trush);

    flag=0;

    break;

    }

    if(c=='+')

    if((pre=sum(pre,beh))==-1)

    {

    scanf("%s",trush);

    flag=0;

    break;

    }

    if(c=='-')pre-=beh;

    }

    else break;

    if(flag)right++;

    }

    printf("%d",(int)(1000.0/tishu*right));

    return 0;

    }

  • 0
    @ 2009-10-24 14:13:27

    暴力破解!~~~~~~~~

    1000可以被m整除

    所以………………

    case

    答案是

    数据 1 2 3 4 5

    答案 500 400 400 600 525

    凑一下m就可以了~~~

    m可以为:1,2,5,10,40,200,1000,25,125,250,500;

    呵呵……%%%

    正好1500次提交~~~~~~~~~~~~~~~~~~留念~~

  • 0
    @ 2009-10-14 11:51:54

    做2个运算函数

    一个标准函数

    一个毛头运算函数

    模拟出结果,如果一直则正确,不一致则错误。

    起码做了1个小时

    还好1次AC

    编译通过...

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

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

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

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

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

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

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

  • 0
    @ 2009-10-04 11:41:18

    哈哈,这题,实在是太牛了

  • 0
    @ 2009-09-05 15:47:08

    第499个通过的……

    20分钟编完,调试1小时,80行的程序,一次AC!!!

  • 0
    @ 2009-08-22 14:20:25

    居然1A了

    太rp了

  • 0
    @ 2009-08-11 17:59:33

    细心.....

    千万注意这句话(尤其是只过前两个点的):毛头大于十的加数相加不会进位!

    也就是说如果不进位就没事了.....

  • 0
    @ 2009-06-30 18:23:26
  • 0
    @ 2009-06-29 22:18:55

    我是出题者= =

    现在已经是大学生了 看你们这些可爱的小朋友们还一直在努力着 真感动

    其实这个题真的非常非常非常简单

    但是考就考一个细心

    要知道大家在正式比赛的时候 细心可是很重要的哦

    大家加油~

  • 0
    @ 2008-10-30 19:56:59

    真的变毛头了……

    高精 or 字符串 都是可以的……看你拿手什么了

    特别提醒:每题的得分是(1000 div m),而不是 100!

    因为这个WA了两次莫名其妙……血的教训啊……

  • 0
    @ 2008-10-16 09:02:22

    2.....搞掉了......

    看了題先笑了半天........

    搞來搞去一直八十五分又把我鬱悶了半天......(是真正意義上的半天 = =)

    原來是一個BOOLEAN的初值沒有給.....

    哎...真佩服這出題的牛人XD

    其實也沒什麽說的啦....對於這種理論簡單,過程繁瑣的題目,

    首先腦子裏面不能亂了陣腳,心平氣和是唯一。

    另外建議寫這種程序的時候盡量模塊化...不要追求行數少,

  • 0
    @ 2008-10-15 21:20:16

    搞了半天终于过了..

    开始居然把ok=0打成bool ok=0;

    我都快成毛头了=.=

  • 0
    @ 2008-09-27 20:57:48

    我和楼下一样哎.....

    数据2 cscccd99能给一下吗?让我知道自己是怎么错的...

    我菜菜的头脑已经把所有我想到的都考虑了

  • 0
    @ 2008-09-24 20:57:40

    我测试数据2还让毛头多得了200分...不知WA在哪里...郁闷中...

  • 0
    @ 2008-09-13 22:57:47

    我也交了两次!!:毛头虽说>10的加数不会进位,但是诸如:13+25=38 这类不用进位的他是能做对的,故不能一个加数>10就break(这一点一定要注意)

  • 0
    @ 2008-09-11 13:31:55

    58行~弱弱地AC……

  • 0
    @ 2008-07-26 13:42:17

    写完这个程序 我们自己都成毛头了

    太猥琐了 BS出题的人

  • 0
    @ 2007-11-06 10:34:53

    大家要小心,当减到0的时候,结果仍然算是正确的,不要被n的范围迷惑了.

  • 0
    @ 2007-10-31 10:43:14

    同LS..可恶的千分制...

    这道题最好把各种爆错的判断直接放在高精度中.一定要利用高精度的现成方法.

    不管高精度,自己瞎编只能是自找麻烦..就像我...

    处理好麻烦...

信息

ID
1300
难度
5
分类
字符串 点击显示
标签
(无)
递交数
421
已通过
137
通过率
33%
被复制
3
上传者