C语言282例中的第61页到62页
发表在C语言图书答疑 2015-05-10
是否精华
版块置顶:
#include<stdio.h>
#include<stdlib.h> 
//haha
void result(int a,int b,int c,int * x2,int * y2)
{
int x[100],y[100],z[100];
int i,j,d,t,gcd;

x[0] = 0;
y[0] = 1;

for(i=0; i < 100; ++i)
{
z[i] = a / b;
d = a % b;
a = b;
b = d;
if(d == 0)
{
gcd = a;  
break;
}
if(i == 0)
{
x[1] = 1;
y[1] = z[0];
}
else
{
x[i+1] = z[i]*x[i] + x[i-1];
y[i+1] = z[i]*y[i] + y[i-1];
}
}

for(t =-1,j = 1; j < i; ++j)
t = -t;

*x2 = -t * x[i];
*y2 = t * y[i];

if(c % gcd != 0)
{
printf("无解!\n");
exit(0);
}

t = c / gcd;
*x2 = *x2 * t;
*y2 = *y2 * t;
}
void test(int a,int b,int c,int x,int y)
{
if(a*x + b*y ==c)
printf("correct!\n");
else
printf("error!\n");
}
int main(void)
{
int a,b,c,x2,y2;
x2 = 0;
y2 = 0;
printf("输入a,b,c:\n");
scanf("%d%d%d",&a,&b,&c);
result(a,b,c,&x2,&y2);
test(a,b,c,x2,y2);
printf("x = %d,y = %d\n",x2,y2);

return 0;

这个程序有问题,比如说我输入:2 1 4 运行的结果如下:
输入a,b,c:
2 1 4
error!
x = 0,y = -4
很显眼结果是错的呀,因为2*x + 1*y = 4这个方程很显然是有整数解的呀,比如x = 1,y = 2
求解释呀!!!
分享到:
精彩评论 5
爱学习
学分:0 LV1
TA的每日心情
开心
2020-03-23 20:54:03
2015-05-11
沙发
请问是哪本书呢?C语言的书有很多。
xw7715793
学分:0 LV1
2015-05-11
板凳
C语言经典编程
爱学习
学分:0 LV1
TA的每日心情
开心
2020-03-23 20:54:03
2015-05-11
地板
[FIELDSET][LEGEND]引自:2楼[/LEGEND]
C语言经典编程
[/FIELDSET]

回复:
  您好,程序是有点出入。
改正:for(t =-1,j = 0; j < =i; ++j)
            t = -t;
改正之后程序可以正确运行,您试一下!
xw7715793
学分:0 LV1
2015-05-11
4L
恩  这样运行起来没问题了  但是我还想问一下,就这个程序的解题思路你是怎么想的?我想了很长时间自己都搞不定这个程序呀!尤其是这x[i+1] = z[i]*x[i] + x[i-1];和这个y[i+1] = z[i]*y[i] + y[i-1];这样的推导公式是怎么推出来的呢?还有就是result函数里面的for循环为什么就是就是循环到100结束呢?到50或者60或者其它数结束行不行呢?实在搞清楚这些东西,求指点一二!谢谢
爱学习
学分:0 LV1
TA的每日心情
开心
2020-03-23 20:54:03
2015-05-12
5L
[FIELDSET][LEGEND]引自:4楼[/LEGEND]
恩  这样运行起来没问题了  但是我还想问一下,就这个程序的解题思路你是怎么想的?我想了很长时间自己都搞不定这个程序呀!尤其是这x[i+1] = z[i]*x[i] + x[i-1];和这个y[i+1] = z[i]*y[i] + y[i-1];这样的推导公式是怎么推出来的呢?还有就是result函数里面的for循环为什么就是就是循环到100结束呢?到50或者60或者其它数结束行不行呢?实在搞清楚这些东西,求指点一二!谢谢
[/FIELDSET]

回复:
  50或者60也可以的,主要是为了找到最大公约数。你按照文档中的公式,找个方程的系数试一试。推导一下应该就很清晰了。其实这个题完全可以用穷举法来做,更简单。这个书也是以前的了,不是我们现在工作人员写的。如果你对函数调用,循环等使用很熟练,建议不用纠结这样的问题,造成不必要的困扰。祝您学习愉快!
首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照