如何用c语言实现ax+by+cz=G所有的正整数的解的输出丫?

标题ax+by+cz=G 求解的问题

大家都对ax+by+cz=G这个方程很眼熟叭,他是一个三元一次的方程,今天我们要用c语言来实现对他的正整数的解的输出`
首先看下窝写的代码:

#include<stdio.h>
int main()
{
    int a,b,c,G,x,y,z;
    printf("请依次输入a b c G的值,两个相邻的数值用一个空格隔开\n");
    scanf("%d %d %d %d",&a,&b,&c,&G);
    if(G>=3)
    {
        for(x=1;x<G-1;x++)
    {
        for(y=1;y<G-1;y++)
        {
            for(z=1;z<G-1;z++)
            {
                if(a*x+b*y+c*z==G)
                {
                    printf("x=%d,y=%d,z=%d\n",x,y,z);
                }
            }
        }
    }
    }
    else
    {
        printf("该方程没有满足条件的解\n");
    }
     return 0;
}

计算机解决问题的方法可以说是简单粗暴滴,他可不会像我们一样用一些什么技巧来算出题目的答案,它要想知道答案,就要把所有可能的结果都试一遍,但是木有办法啊,人家的计算速度就是比你快,这咱们不服是真的不行啊。

So,,,我们要求方程的所有正整数的解,那么就需要我们把x,y,z的所有能够取到的正整数的值都取一遍,但是我们知道正整数里面最小的数是1,所以三个数最小能取到的值都为1,那最大是多少呢?是方程等号右边的“G”吗? 并不是哦,如果你有一个数取到了G,那么另外的两个自变量就默认是0了,这就不符合正整数的要求了,所以这三个数能取到的最大值都是G-1-1,也就是G-2(G减2)

所以呢,我们用最常用的for循环来安排他们就可。。。。怎么说?就是让x,y,z三个自变量都从1取到G-1,把所有可能的值都去遍,看看其中x,y,z的哪些值可以满足这个方程,嵌套这运用三个for循环就OK辣!!

当然如果G本身小于三的话,我们x,y,z就无论如何也无法取到使方程成立的正整数,所以也就没有满足该方程的合适的解了。。。

好了,这道题目就说到这儿叭,还望各位大佬多多指针;

最后我再说一个很重要的秘密给你们听:
我其实。。。。。。在。。。。线。。。卑微求赞,爱你们哦

发布了7 篇原创文章 · 获赞 9 · 访问量 3456

猜你喜欢

转载自blog.csdn.net/weixin_46253007/article/details/104964121