标题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就无论如何也无法取到使方程成立的正整数,所以也就没有满足该方程的合适的解了。。。
好了,这道题目就说到这儿叭,还望各位大佬多多指针;
最后我再说一个很重要的秘密给你们听:
我其实。。。。。。在。。。。线。。。卑微求赞,爱你们哦