• 一天一道算法题---6.8--数学题


    感谢微信平台:一天一道算法题---每天多一点进步----明天 考离散了

    明天 高考结束了

    看上去都是 好日子.....

    上题目了:

      求出用1 , 2 ,5这三个数不同个数的组合的和为100的组合个数。

      如:100个1是一个组合;5个1+19个5是一个组合

    OK:--- 几天折磨后 终于来了个 我能做的....

    PS:  关于6.7--栈中O(1)实现min函数等的  应该会在今晚贴上..

    平台上关于这题的分析很到位:

      设 1的个数为X 2的个数为Y 5的个数为Z 和为100的组合总数为cnt

    1. 最容易实现的 应该是o(n^3) 1 2 5分别3层for .... 这样去做的话 在我们学校的C++期末考试 应该是可以拿分的(真讽刺...) 我这边就不给出它的伪代码了..

    2.

    x+2y+5z = 100;

    x + 5z = 100-2y; // 所以 x+5z一定是偶数

    z = 0    x = 100,98,96……,0  ---- 100以内的偶数

    z = 1    x = 95,93,91……,1 --- 95以内的奇数

    z = 2    x = 90,88,86……,0 --- 90以内的偶数

    …… …… ……

    z = 19   x = 5 3 1

    z = 20   x = 0  ---  数量为1

    这有2个很重要的计算公式:

    某个偶数m以内的偶数个数(含0)的计算公式为:

      m/2+1 = (m+2)/2

    某个奇数n以内的奇数个数的计算公式为:

      (n+2)/2

    so the cnt's sum:

    int cnt = 0;

    for( int i = 0 ; i<=100 ; i+=5 )

    {

      cnt+=(i+2)/2;

    }

    cout<<cnt<<endl;

    today:

      我自倾怀 君且随意

      有生之年 欣喜相逢

    just follow your heart
  • 相关阅读:
    linux下链接静态链接库
    linux消息队列操作(转)
    android 模块编译,mm 命令
    关于函数里对指针赋值的问题
    Android内核和驱动篇Android内核介绍 (转)
    pthread属性使用(转)
    MOD_INC_USE_COUNT和MOD_DEC_USE_COUNT(转)
    linux下配置文件的读写
    从Linux程序中执行shell(程序、脚本)并获得输出结果(转)
    封装错误信息打印的函数
  • 原文地址:https://www.cnblogs.com/radical/p/3775942.html
Copyright © 2020-2023  润新知