免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chong232
打印 上一主题 下一主题

考考大家一道某著名IT的面试题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-08-18 14:41 |只看该作者
suoyi  1-12
he 1-23
benjiam 发表于 2010-08-18 14:35



    1-23都不行了还指望1-12,很简单地拿那个50改改就是1-12了
比如14
1-12的话是12+7-5
而实际上7+7=14

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
22 [报告]
发表于 2010-08-18 15:18 |只看该作者
想了想,还是不会

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2016-04-23 14:25:46操作系统版块每日发帖之星
日期:2016-05-09 06:20:00
23 [报告]
发表于 2010-08-18 16:54 |只看该作者
假设12a+7b+5c = w使|a|+|b|+|c|最小:

如果b,c都为正,则有12A+7B+5C = w,A = a + 1,B=b-1,C=c-1,则显然|a|+b+c>|A|+B+C=|A|+b+c-2。a|+|b|+|c|最小不成立。

如果b,c都为负数,效果也是一样的。a|+|b|+|c|最小不成立。

因此b,c只能为异号,或者一个为0或全0。

下来只有下面这三种情况:

(1)12a+7b = w;如果a,b异号,则会出现12-5=7或者5-12= -7的情况,|a|+|b|+|c|最小不成立。因此a,b同号且为正。

(2)12a+5c = w;同(1)理,|a|+|b|+|c|最小不成立。因此a,c同号且为正。

(3)12a+7b+5c = w;因为 b,c为异号。如果a!=0也会出现12-5=7或者5-12= -7或者12-7=5或者7-12= -5的情况,|a|+|b|+|c|最小不成立。因此,当b,c为异号时,a=0。



综上,要是12a+7b+5c = w满足|a|+|b|+|c|最小。只有这三种情况:

(1)c=0, a,b>0,  12a+7b = w;

(2)b=0, a,c>0,  12a+5c = w;

(3)a=0, b*c<0,  7b+5c = w;

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2016-04-23 14:25:46操作系统版块每日发帖之星
日期:2016-05-09 06:20:00
24 [报告]
发表于 2010-08-18 16:54 |只看该作者
本帖最后由 jeasun 于 2010-08-18 18:51 编辑
  1. #include <stdio.h>

  2. int main()

  3. {

  4.     int i = 0;

  5.     int j = 0;

  6.     int w = 116;



  7.     /* (1) c=0, a,b>0,  12a+7b = w */

  8.     for (i = 0; i <= w/7+1; i++) {

  9.        for (j = 0; j <= w/12+1;  j++) {

  10.            if ((7*i + 12*j) == w) {

  11.               printf("7*%d+12*%d=%d", i, j, w);

  12.               return 0;

  13.            }

  14.        }

  15.     }



  16.     /* (2) b=0, a,c>0,  12a+5c = w */

  17.     for (i = 0; i <= w/5+1; i++) {

  18.        for (j = 0; j <= w/12+1;  j++) {

  19.            if ((5*i + 12*j) == w) {

  20.               printf("5*%d+12*%d=%d", i, j, w);

  21.               return 0;

  22.            }

  23.        }

  24.     }



  25.     /* (3) a=0, b*c<0,  7b+5c = w ; 2 = 7-5 */

  26.            for (i = 1; ; i++) {

  27.                 for (j = -1; ; j--) {
  28.                        
  29.                         if ((7*i + 5*j) < 0)

  30.                         {

  31.                                 break;

  32.                         }

  33.                         if (((7*i + 5*j) == w) && i*j < 0) {

  34.                                 printf("7*(%d)+5*(%d)=%d", i, j, w);

  35.                                 return 0;

  36.                         }

  37.                         else if (((5*i + 7*j) == w)&& i*j < 0)

  38.                         {
  39.                                 printf("5*(%d)+7*(%d)=%d", i, j, w);

  40.                                 return 0;
  41.                         }
  42.                 }

  43.         }

  44.     puts("can't find suit a,b,c"); /* can’t reach here.*/

  45.     return 1;

  46. }
复制代码

论坛徽章:
2
15-16赛季CBA联赛之四川
日期:2016-04-23 14:25:46操作系统版块每日发帖之星
日期:2016-05-09 06:20:00
25 [报告]
发表于 2010-08-18 16:55 |只看该作者
上面的分析是同事做的,这个问题还是考观察能力和分析能力。
程序不是重点。

论坛徽章:
0
26 [报告]
发表于 2010-08-18 17:06 |只看该作者
回复 23# jeasun


    我很景仰你同事啊, 呵呵,学数学出身的?不错,我数学太差了,根本就想不起来转化成方程来考虑,强啊

论坛徽章:
0
27 [报告]
发表于 2010-08-18 17:08 |只看该作者
假设12a+7b+5c = w使|a|+|b|+|c|最小:

如果b,c都为正,则有12A+7B+5C = w,A = a + 1,B=b-1,C=c-1, ...
jeasun 发表于 2010-08-18 16:54

这个不是可以顶,这个是一定要顶。

论坛徽章:
0
28 [报告]
发表于 2010-08-18 17:13 |只看该作者
本帖最后由 litdong 于 2010-08-18 17:15 编辑
假设12a+7b+5c = w使|a|+|b|+|c|最小:

如果b,c都为正,则有12A+7B+5C = w,A = a + 1,B=b-1,C=c-1, ...
jeasun 发表于 2010-08-18 16:54



呵呵,感觉回到学生解方程时代了.还是有点难度的附加题.
还真没想到如此分析.

论坛徽章:
0
29 [报告]
发表于 2010-08-18 17:29 |只看该作者
我觉得12,7,5这几个数字有点特殊12=7+5,估计想考的不是这个特殊的例子。就是三常整数a1,a2,a3已知。然后满足a1x+a2y+a3z=w(x,y,z为整数),求最小|x|+|y|+|z|.

论坛徽章:
0
30 [报告]
发表于 2010-08-18 17:35 |只看该作者
回复 24# jeasun


    顶分析
    分析的结果正确但是程序的第三部分不对,因为对于b和c的范围估计错误,比如我用w=1给你算算看,结果应该是b=-2,c=3,而你的没答案,不信你试试看
    个人小建议:因为a=0化为7b+5c=w,这里可以用拓展欧几里得来算
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP