【问题标题】:Check at least 2 numbers are perfect squares - c program检查至少 2 个数字是完美的正方形 - c 程序
【发布时间】:2019-01-12 08:15:24
【问题描述】:

输出:

1 2 9
1 3 8
1 4 7
1 5 6
2 3 7
2 4 6
3 4 5 

预期:

1 2 9
1 4 7

我只想打印至少有 2 个完美正方形的数组。 在上面的输出中,“1 2 9”1 和 9 是完美的正方形,1 和 4 也是如此。剩余的结果被跳过或不打印。

以下是我当前的代码:

#include <stdio.h>
#include <math.h>
int main(void) {
int num;
scanf("%d",&num);
if(num<200)
for(int a = 1; a < num; a++) {
    for(int b = a + 1; b < num; b++) {
        for(int c = b + 1; c < num; c++) {
            if(a + b + c == num) {
                printf("%d %d %d\n", a, b, c);
            }
        }
    }
  }
}

【问题讨论】:

  • "我只想打印至少有 2 个完美正方形的数组。"那么是什么阻止你这样做呢?
  • 那是我在您的recent question about sums 中发布的代码,但您在这里没有尝试解决完美的正方形。
  • 你不知道如何检查一个数是否是一个完美的正方形?您发布的代码只是列出了与输入值相加的所有三个不同数字的集合。
  • 我是编程新手,请多多支持

标签: c loops recursion conditional


【解决方案1】:

这是一个非常简单的任务,你只需要检查每个{a,b,c} 是否至少有两个方块。这可能不是检查数字是否为正方形的最佳方法,但您可以编写自己的函数来检查它。

#include <stdio.h>
#include <math.h>

int is_square(int x)
{
    for(int i=1;i<=x/i;i++)
    {
        if(i*i==x)
        {
            return 1;
        }
    }

    return 0;
}

int main(void)
{
    int num;
    scanf("%d",&num);
    if(num<200)
    {
        for(int a = 1; a < num; a++)
        {
            for(int b = a + 1; b < num; b++)
            {
                for(int c = b + 1; c < num; c++)
                {
                    if(a + b + c == num && is_square(a) + is_square(b) + is_square(c) >= 2)
                    {
                        printf("%d %d %d\n", a, b, c);
                    }
                }
            }
        }
    }
}

【讨论】:

  • 不是另一个for循环,你能看看x/x = round(x/x)吗?这是我会使用的逻辑,但我习惯了其他语言,所以比其他任何东西都更好奇。
  • @NathanStockton x/x 对于除0 之外的整数将始终计算为1
  • @NathanStockton 我想你的意思是sqrt(x) == floor(sqrt(x))?
  • 好的,所以你不能得到一个浮点值?如果 sqrt(x)%1=0,你能检查一下吗?我总是尽可能避免使用 for 循环来评估数学问题。
  • i*i in for(int i=1;i*i&lt;=x;i++) 可能会溢出。 for(int i=1;i&lt;=x/i; i++) 没有。
猜你喜欢
  • 2015-11-06
  • 2022-08-23
  • 2016-07-03
  • 2016-03-07
  • 1970-01-01
  • 2013-07-04
  • 2020-10-03
相关资源
最近更新 更多