逆天了我,abs在openjuge不能用

本文探讨了在C++中使用abs函数遇到的问题及解决方案。通过对比不同实现方式,展示了如何正确调用标准库中的abs函数来获取整数的绝对值,并最终通过采用fabs函数实现了代码的正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

***逆天了我,abs在openjuge不能用***
abs函数用法
功 能: 求整数的绝对值


#9438967提交状态
状态: Compile Error
编译错误信息
/home/runner/temp/9544556.165202/Main.cc: In function ‘int main()’:
/home/runner/temp/9544556.165202/Main.cc:54:33: error: ‘abs’ was not declared in this scope
              if(max<=abs(flag[i]))
                                 ^
/home/runner/temp/9544556.165202/Main.cc:54:33: note: suggested alternative:
In file included from /home/runner/temp/9544556.165202/Main.cc:3:0:
/usr/include/c++/5/cmath:99:5: note:   ‘std::abs’
     abs(_Tp __x)
     ^
     
源代码
#include<cstdio>
#include<cstring>
 #include<cmath>
 int main()
 {
     int n,k,i,t,len,max;
     char s1[13],s2[13],temp[10];
     int flag[12];
     scanf("%d",&n);
     while(n--)
     {
         memset(flag,0,sizeof(flag));
         for(t=1;t<=3;++t)
         {
             scanf("%s%s%s",s1,s2,temp);
             len=strlen(s1);              //两边个数肯定相等,所以两边长度也一样  
             if(strcmp(temp,"even")==0)//如果平衡
             {
                 for(i=0;i<len;++i)
                 {
                     flag[s1[i]-'A']=10;  //说明两边都为真,将标记数组置为10
                     flag[s2[i]-'A']=10;
 
                 }
             }
             else if(strcmp(temp,"up")==0)//说明左边重
             {
                 for(i=0;i<len;++i)
                 {
                     if(flag[s1[i]-'A']!=10)
                         ++flag[s1[i]-'A'];  //左边加一
                     if(flag[s2[i]-'A']!=10)
                         --flag[s2[i]-'A'];  //右边减一
 
                 }
            }
             else
             {
                 for(i=0;i<len;++i)      //说明右边重
                 {
                     if(flag[s1[i]-'A']!=10)
                         --flag[s1[i]-'A'];  //左边减一
                     if(flag[s2[i]-'A']!=10)
                         ++flag[s2[i]-'A'];  //右边加一
                 }
             }
         }
         max=0;
         k=0;
         for(i=0;i<12;++i)
         {
             if(flag[i]==10)
                 continue;
             if(max<=abs(flag[i]))
             {
                 max=abs(flag[i]);
                 k=i;
             }
         }
         if(flag[k]>0)
             printf("%c is the counterfeit coin and it is heavy.\n",'A'+k);
         else
             printf("%c is the counterfeit coin and it is light.\n",'A'+k);
     }
     return 0;
 }
那就老老实实用fbs吧!

#9438970提交状态
状态: Accepted
源代码
#include<cstdio>
#include<cstring>
 #include<cmath>
 int main()
 {
     int n,k,i,t,len,max;
     char s1[13],s2[13],temp[10];
     int flag[12];
     scanf("%d",&n);
     while(n--)
     {
         memset(flag,0,sizeof(flag));
         for(t=1;t<=3;++t)
         {
             scanf("%s%s%s",s1,s2,temp);
             len=strlen(s1);              //两边个数肯定相等,所以两边长度也一样  
             if(strcmp(temp,"even")==0)//如果平衡
             {
                 for(i=0;i<len;++i)
                 {
                     flag[s1[i]-'A']=10;  //说明两边都为真,将标记数组置为10
                     flag[s2[i]-'A']=10;
 
                 }
             }
             else if(strcmp(temp,"up")==0)//说明左边重
             {
                 for(i=0;i<len;++i)
                 {
                     if(flag[s1[i]-'A']!=10)
                         ++flag[s1[i]-'A'];  //左边加一
                     if(flag[s2[i]-'A']!=10)
                         --flag[s2[i]-'A'];  //右边减一
 
                 }
            }
             else
             {
                 for(i=0;i<len;++i)      //说明右边重
                 {
                     if(flag[s1[i]-'A']!=10)
                         --flag[s1[i]-'A'];  //左边减一
                     if(flag[s2[i]-'A']!=10)
                         ++flag[s2[i]-'A'];  //右边加一
                 }
             }
         }
         max=0;
         k=0;
         for(i=0;i<12;++i)
         {
             if(flag[i]==10)
                 continue;
             if(max<=fabs(flag[i]))
             {
                 max=fabs(flag[i]);
                 k=i;
             }
         }
         if(flag[k]>0)
             printf("%c is the counterfeit coin and it is heavy.\n",'A'+k);
         else
             printf("%c is the counterfeit coin and it is light.\n",'A'+k);
     }
     return 0;
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值