练习25

 
  1. /***************************************************************************
  2.  25. (量水) 用存水为M,N升的两个罐子,量出A升水。
  3.    分析:显然  0=<A<=M+N
  4.    由题意,我们可以假设量出的A升水为M,N升两个瓶子的水的总和;
  5.    对于M和N整体来说,只有4种操作:
  6.    1.用M升瓶子装水
  7.    2.用M升瓶子倒水
  8.    3.用N升瓶子装水
  9.    4.用N升瓶子倒水
  10.    由此得出表达式: M*x + N*y = A (其中x,y为整数)
  11.    即求此方程的整数解;
  12.    而此方程有整数解的充要条件为: M,N的最大公约数能整除A
  13.    如何求出此整数方程的解成了问题的关键;
  14. ****************************************************************************/
  15. #include <stdio.h> 
  16. int get_max_common_divisor(int a, int b)
  17. {
  18.     int c;
  19.     do
  20.     {
  21.         c = a%b;
  22.         a=b;
  23.         b=c;
  24.     }while(c);
  25.     return a;
  26. }
  27. void main()
  28. {
  29.     int x,y;
  30.     int M,N,A;
  31.     printf("请按顺序输入M,N,A:/n");
  32.     scanf("%d%d%d", &M, &N, &A);
  33.     if(A % get_max_common_divisor(M,N) !=0 )
  34.     {
  35.         printf("问题无解!/n");
  36.         return;
  37.     }
  38.     for(x=0; (A-M*x)%N !=0; x++);
  39.     y = (A-M*x)/N;
  40.     printf("x=%d y=%d/n",x,y);
  41. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值