zoukankan      html  css  js  c++  java
  • 美团网笔试题之正约数

    题目是这样的:

    50个灯,有50个按钮,编号为1,2,3……50.刚开始灯全部是熄的,现在依次按按钮,每次按到按钮i,i的倍数编号的灯就变一下状态,问到最后开了几盏灯。

    这里考的问题其实就是一个数字的正约数的个数是奇数还是偶数的问题。

    这个题我在某数学网站中找到的,感谢百度~

    然后,我还发现了,这个题是小学六年级的数学题……尼玛啊!!!

    其实对于我这样的准程序员来说,遇到这种问题,上来的第一个想法就是,写个小程序,跑一下就知道了~

    但是在你笔试的时候,是没有台笔记本放在你面前的。

    回来谈这个问题,如何判断一个数字的正约数个数呢?说破了很简单。一个普通的数字,做一个可以整除的除法,通常是这样的一个式子:

    a = b / c

    而且反过来也是成立的:

    c = b / a

    所以能够得到结论:一个数的公约数往往是成对存在的。但是存在例外。

    这个例外就是完全平方数。比如2 * 2 = 4,这时上面的结论就不成立了。

    所以,只有一个完全平方数的正约数个数是奇数的,其余的,都是偶数的。

    然后结果就很明显了。

    演示结果:

    代码演示:(最笨的方法)

     1 int GetSpecialNumber(int n)
     2 {
     3     int counter = 0;
     4     for(int i = 1;i <= n;++ i)
     5     {
     6         if(n % i == 0)
     7         {
     8             counter += 1;
     9         }
    10     }
    11     return counter;
    12 }
    13 void Make_It()
    14 {
    15     int a[50];
    16     //initialize
    17     for(int i = 0;i < 50;++ i)
    18     {
    19         a[i] = i + 1;
    20     }
    21     //find it
    22     int i = 50;
    23     while(i --)
    24     {
    25         if(GetSpecialNumber(a[i]) & 0x01)
    26             cout << a[i] << ends;
    27     }
    28     cout << endl;
    29 }
    30 int main()
    31 {
    32     cout << "Hello world!" << endl;
    33     int array[] = {10, -1, 3, -11, -20, 33, 1, -6, 13};
    34     cout << MaxSubArray(array, sizeof(array)/sizeof(int)) << endl;
    35     //Do_It();
    36     Make_It();
    37     return 0;
    38 }
  • 相关阅读:
    COLLABNET 在中文语言下无法编辑用户信息.
    安装ramdisk有可能使xp3389不能用
    关于23种设计模式的有趣见解
    成绩统计分析系统规划
    编程用开源软件或者免费软件
    ROS设置大全
    禁用TextBox自动填充autocomplete=false
    CollabNet Subversion Server安装与配置
    DbEntry查询表的使用
    BugTracker.Net设置问题
  • 原文地址:https://www.cnblogs.com/matrix-r/p/3320272.html
Copyright © 2011-2022 走看看