找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 359|回复: 2

买不到的数目

[复制链接]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
发表于 2013-6-18 09:13:02 | 显示全部楼层 |阅读模式


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

资源约定:
峰值内存消耗 < 64M
CPU消耗  < 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

14

主题

65

回帖

0

积分

新手上路

积分
0
发表于 2013-6-18 21:14:00 | 显示全部楼层
  1. #include <stdio.h>
  2. // 辗转相除法求最大公约数
  3. int gcd(int a, int b)
  4. {
  5.     int t;
  6.     while (b)
  7.     {
  8.         t = a % b;
  9.         a = b;
  10.         b = t;
  11.     }
  12.     return a;
  13. }
  14. int main()
  15. {
  16.     int m, n;
  17.     scanf("%d %d", &m, &n);
  18.     // 参数检查
  19.     if (0 >= m || 0 >= n)
  20.     {
  21.         return -1;
  22.     }
  23.     // 有1颗一包时可以组合出任意数
  24.     if (1 == m || 1 == n)
  25.     {
  26.         printf("%d\n", -1);
  27.         return 0;
  28.     }
  29.     // 两数不互质,不能组合出的数为正无穷
  30.     if (1 != gcd(m, n))
  31.     {
  32.         printf("+oo\n");
  33.         return 0;
  34.     }
  35.     printf("%d\n", m * n - m - n);
  36.     return 0;
  37. }
复制代码

67

主题

115

回帖

0

积分

版主

积分
0
发表于 2013-6-25 12:10:04 | 显示全部楼层
ops:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 13:58 , Processed in 0.078088 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表