• 算法与分析 统计数字问题和整数因子分解问题?



    一本书的页码从自然数1 开始顺序编码直到自然数n书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n 计算出书的全部页码中分别用到多少次数字0 1 2 …,9
    编程任务 :
    给定表示书的总页码的10 进制整数n (1≤n≤1000000000) 。编程计算书的全部页码中分别用到多少次数字0 1 2 …,9
    数据输入 :
    有m个输入数据,第1 行是m的个数,下m行给出表示书的总页码的整数n 。
    结果输出:
    输出有m行,在每行内输出页码中用到数字k-1 的次数,k=1 2 …,10 ,中间用空格分开。
    输入样例:
    2
    5
    11
    输出样例:
    1 1 1 1 1 0 0 0 0 0
    1 4 1 1 1 1 1 1 1 1
    运行时间限制30秒 运行内存限制8192K


    2 问题描述 :
    大于1 的正整数n 可以分解为:n=x1*x2*…*xm 。
    例如,当n=12 时,共有8 种不同的分解式 :
    12=12 ;
    12=6*2 ;
    12=4*3 ;
    12=3*4 ;
    12=3*2*2 ;
    12=2*6 ;
    12=2*3*2 ;
    12=2*2*3 。
    编程任务 :
    对于给定的正整数n ,编程计算n 共有多少种不同的分解式 。
    数据输入 :
    有m个输入数据,第1 行是m的个数,下m行有1 个正整数n (1 ≤n ≤1000000)。
    结果输出:
    输出有m行,每行是计算出的不同的分解式数。
    输入样例:
    1
    12
    输出样例:
    8

    运行时间限制30秒 运行内存限制8192K
    编程 09-08-15 四条棍99 发布
    2个回答 时间 投票

    0
    一个人的颓废


    1.
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define N 2048 //若你有多于2048本书要计算,那后面就要申请内存了

    void func(unsigned int (*ptr)[10], int m, int idx)
    {
    int i, j, h;
    for (i=1; i<=m; ++i) {//这个for可以通过算法来提高效率,就是根据高位数字来得到低位出现的0-9的次数,累积就行了,算法很简单
    j = i;
    while (j > 0) {
    ++ptr[idx][j%10];
    j /= 10;
    }
    }
    }

    int main()
    {
    unsigned int arr[2048][10] = {0}; //保存每本书的0-9次数
    unsigned int (*ptr)[10] = 0;

    unsigned int m[N], n;//m[N]保存每本书的页数
    unsigned int *m_ptr;
    unsigned int i;

    printf("Input n (the lines of m): ");
    scanf("%u", &n);
    if (n > N) {//若书多于2048本,申请内存来保存
    ptr = (unsigned int (*)[10])malloc(n*10*sizeof(unsigned int));
    m_ptr = (unsigned int *)malloc(n*sizeof(unsigned int));
    }
    else {
    ptr = arr;
    m_ptr = m;
    }

    printf("Input %u numbers: ", n);
    for (i=0; i<n; ++i) {
    scanf("%u", m_ptr + i);
    }

    for (i=0; i<n; ++i) { // 跟上面的for分开,可以避免打扰编译器优化的输入缓冲,可以合到上面去.
    func(ptr, m_ptr[i], i);
    }
    // 输出0-9
    printf("number: %5u %5u %5u %5u %5u %5u %5u %5u %5u %5u ", 0, 1, 2, 3, 4, 5, 6, 7, 8,
    9);
    for (i=0; i<n; ++i) { //输出每本书0-9的次数及总页数(有单页的书,这样的书真强大....)
    printf("times: %5u %5u %5u %5u %5u %5u %5u %5u %5u %5u [Total pages: %5u]
    n", ptr[i][0], ptr[i][1], ptr[i][2], ptr[i][3], ptr[i][4], ptr[i][5], ptr[i][6], ptr[i][7], ptr
    [i][8], ptr[i][9], m_ptr[i]);
    }

    if (ptr != arr) {
    free(ptr);
    free(m_ptr);
    }
    }

  • 相关阅读:
    BSGS模板(互质与不互质) 洛谷P4195、P3846
    整除分块(数论分块)
    洛谷P3327 [SDOI2015]约数个数和——莫比乌斯反演
    模块二
    模块
    二分法 匿名函数
    3.26作业
    函数的递归调用
    yield表达式 三元表达式
    3.25作业
  • 原文地址:https://www.cnblogs.com/yuxingxing/p/5412034.html
Copyright © 2020-2023  润新知