首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请高手将“买不到的数目”的C++程序写出来!

2013-12-02 
求助:请高手将“买不到的数目”的C++程序写出来!!小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗

求助:请高手将“买不到的数目”的C++程序写出来!!
   小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。
    小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
    你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
    本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入:
两个正整数,表示每种包装中糖的颗数(都不多于1000)
要求输出:
一个正整数,表示最大不能买到的糖数
例如:
用户输入:
4 7
程序应该输出:
17
再例如:
用户输入:
3 5
程序应该输出:
7

请将此题的C++程序写出,若是有解题思路更好。谢谢!!
[解决办法]
#include <iostream>
using namespace std;

int getapp(int x, int y)
{
int temp;
if (x == y)
return x;
else {
while (y != 0) {
temp = x % y;
x = y;
y = temp;
}
return x;
}
}
int main()
{
int ix, iy;
cout << "Enter two numbers:" << endl;
cin >> ix >> iy;
if (getapp(ix, iy) == 1)
cout << "The number you want is " << ix * iy - ix - iy << endl;
else
cout << "Cannot get the number you want !" << endl;
return 0;
}
[解决办法]
证明以下2个命题即可:
1. (x-1)(y-1)-1 不能被表示为 ax+by的形式
2. 大于等于(x-1)(y-1)都能被表示为 ax+by的形式

命题1用反证法即可。
假设 (x-1)(y-1)-1 = ax+by     (a、b>=0)
即 ax+by = xy-x-y
即 (a+1)x+(b+1)y=xy
所以 a+1要能整除y,设 a+1=cy (c>0)
所以 b+1要能整除x,设 b+1=dx (d>0)
(c+d)xy=xy
=> c+d=1
必有c和d中有一个<=0
与假设矛盾

命题2也不难证明,这里就不写了

热点排行