搜索
查看: 498|回复: 7
打印 上一主题 下一主题

挑战【1079】3的倍数2测试数据6和10出错!为什么?

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2018-7-11 10:51:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 Smallbee 于 2018-7-11 10:54 编辑
题目信息

判断3的倍数(2)(ID:1079)
题目描述
小哈现在给你一个整数,想让你判断一下它是否是3的倍数。
但是小哈给你提供了一个新的思路,一个数的各位数之和为3的倍数,这个数就是3的倍数呀!
请你用这个方法判断这个数是否为3的倍数。


我的代码:
  1. #include <stdio.h>
  2. void main(int argc, char *argv[])
  3. {
  4.     int x,y=0;
  5.     scanf("%d",&x);
  6.     while (x>0)
  7.     {
  8.         y+=x%10;
  9.         x/=10;
  10.     }
  11.     if (y%3==0)
  12.         printf("yes\n");
  13.     else
  14.         printf("no\n");
  15. }
复制代码
测试结果提示对于测试数据6、10结果出错!
Output Detail

    =================/6.out
    Right:
    no
    -----------------
    Your:
    yes
    ...
    ###############################################################################
    =================/10.out
    Right:
    no
    -----------------
    Your:
    yes
    ...
    ###############################################################################

还请指教程序哪儿有bug或者告知测试数据6和10是什么数,谢谢!


沙发
 楼主| 发表于 2018-7-11 11:21:33 | 只看该作者
本帖最后由 Smallbee 于 2018-7-27 20:22 编辑

原来缺少了负数的判断:在读入x后,应该增加负数的判断:
  1. if (x<0)
  2. x=-x;
复制代码
但为什么Python中第10个数据又出错了呢?
  1.     def addnums(n):
  2.         s=0
  3.         while n>0:
  4.             s+=n%10
  5.             n//=10
  6.         return s
  7.      
  8.     x=int(input())
  9.     y=-x if x<0 else x
  10.     while y>9:
  11.         y=addnums(y)
  12.     if y in [0,3,6,9]:
  13.         print("yes")
  14.     else:
  15.         print("no")
复制代码





板凳
发表于 2018-7-11 14:07:36 | 只看该作者
你这是c++吗 还是c?我只会C语言。

地板
发表于 2018-7-11 14:10:11 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a%3==0)
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

5#
发表于 2018-7-11 14:10:43 | 只看该作者
6#
 楼主| 发表于 2018-7-11 14:25:56 | 只看该作者

这是1078这道题的答案,也就是直接判断该数是否是3的倍数。1079算法不一样,要求用其各位数之和来判断是否是3的倍数。

7#
 楼主| 发表于 2018-7-15 16:56:38 | 只看该作者
本帖最后由 Smallbee 于 2018-7-27 20:24 编辑

午睡醒来突然想到:既然认证不了教师学生,不能直接下载测试数据,那为什么不可以自己将测试数据打印出来呢?

于是,python程序小改了下:
  1. x=int(input())
  2. z=x
  3. ......
  4. if y%3==0:
  5.     print('yes',z)
  6. else:
  7.     print('no',z)
复制代码
哈哈!这下10个测试数据都有了。重点看下提示错误的第10个数据吧:
=================/10.out
Right:
no
-----------------
Your:
('yes', -4657446546)
...

唉,这个数能被3整除啊!确确实实是3的倍数啊!!!而且,同样的算法C就是正确啊!


8#
发表于 2018-7-16 11:38:40 | 只看该作者
这题还有之前的一题我也搞不明白,明明一样的算法,用c写就正确,C++就会有错误,莫名其妙的,而且认证信息半天认证不了也看不到测试数据,烦躁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表