一道abc+cba=1333的问题

转载:http://blog.csdn.net/fangzhengshu/article/details/17091791

前两天被华为的鄙视了一下,因为临时出了一道abc+cba=1333的问题,当时由于什么都没有准备,结果就给他一个3个for循环的结果,其实当时也觉得这个不合适,简答分析了一下,a和c肯定不能等于0,因为这样结果肯定达不到1333,后来又对这个问题做了简单的分析:

1333这个数字其实是比较特别的,什么情况下才有可能得出结尾是3的数字?

4+9=13,5+8=13,6+7=13,7+6=13,8+5=13,9+4=13

也就是说其实只有a和c的值相加等于13的情况下才可能等于1333,这样又可以得出下一个结论:

既然a+c=13,那么100*a+100*c等于多少,显然是1300,这样又可以得到如下:

abc+cba=100*a+100*c+a+c+20*b=1333,不难算出b的值肯定等于1,由此可以对程序做出如下优化:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>                                                                                                                                                       
  2.   
  3. int print(void);  
  4. int main(){  
  5.     print();  
  6.     return 0;  
  7. }  
  8. int print(){  
  9.     int a, b, c;  
  10.     for(a=4; a<10; a++){  
  11.         c = 13 - a;  
  12.         b = 1;  
  13.         int tmp = 101*a+20*b+101*c;  
  14.         if(tmp == 1333){  
  15.             printf("a=%d,b=%d,c=%d\n", a, b, c);  
  16.         }  
  17.     }  
  18.     return 0;  
  19. }  


得到如下结果:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ./test   
  2. a=4,b=1,c=9  
  3. a=5,b=1,c=8  
  4. a=6,b=1,c=7  
  5. a=7,b=1,c=6  
  6. a=8,b=1,c=5  
  7. a=9,b=1,c=4  


有兴趣的同学可以使用三个for循环看下得到的结果是否一致

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值