请求帮忙,PAT大美数,输出感觉没问题,但是都错了QAQ

【PAT】
若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。

输入格式:

输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 1 0000的正整数。

输出格式:

对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。

输入样例:

3
18 29 40

输出样例:

Yes
No
Yes

这是一道PAT的乙级题目,限时估计要在半小时以内。我了一个小时,用C#写的,但是答案错误,我想看看有没有大神帮我看看我的程序是哪里的问题。

using System;
using System.Collections.Generic;

class Thousand1
{
static void Main()
{
int num =int.Parse(Console.ReadLine());
string[] strs = Console.ReadLine().Split(' ');
for (int i = 0; i < num; i++)
{
if (IsBeautifulNum(int.Parse(strs[i])) == true)
{
Console.WriteLine("Yes");
}
else Console.WriteLine("NO");
}
Console.ReadKey();
}

static bool IsBeautifulNum(int m)
{
List<int> nums = new List<int>();

for (int i = 1; i <= m; i++)
{
if (m % i == 0)
{
nums.Add(i);
}
}

for (int a = 0; a < nums.Count-3; a++)
{
for (int b = a + 1; b < nums.Count - 2; b++)
{
for (int c = b + 1; c < nums.Count - 1; c++)
{
for (int d = c + 1; d < nums.Count; d++)
{
int numAdd = nums[a] + nums[b] + nums[c] + nums[d];
if ( numAdd%m== 0) return true;
}
}
}
}
return false;
}
}

#笔试题目##春招##C/C++#
全部评论
因数没找全。i*i>m的时候,i也可能是m的因数,比如样例中m=18,因数包含9。所以老哥你这个连样例都过不了啊……
点赞 回复 分享
发布于 2019-03-20 07:09
N 可以整除它的 4 个不同正因数之和<=>N整除b,也就是N是b因数,这四个因数之和是作为被除数吧,那么就应该是我上面的这种addnum%m的形式,网上好多是m%addnum的形式,希望我没理解错误。。。
点赞 回复 分享
发布于 2019-03-20 09:47
我觉得打个表吧。。。如果一个数是大美数,那么可以整除它的所有数也是大美数。。打个表遍历一下?
点赞 回复 分享
发布于 2019-03-19 22:30

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-23 17:32
那如果是字节外包呢?据我所知工牌无区别&nbsp;可以晒出去装X的那种
秋盈丶:残酷的是,都一样,管你是不是字节,不过我是很反对这种的,本是同根生,市场行情决定了用工的模式会有很多外包,分层只是单纯为了筛选
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务