zoukankan      html  css  js  c++  java
  • 第一章-算法概述

    第一题

    问题名称:统计页码数字问题。

    问题描述:给定一个数n,计算从0到n出现过多少次0,1,2,...,9。数字n开头不能有0,如6不能表示为06或006。

    数据输入:数据输入由input.txt文件提供。每个文件只有1行,给出数字n。

    结果输出:将输出结果保存到output.txt文件中。每个文件只有10行,第k行输出数字k-1的次数,k=1,2,...,10。

    时间复杂度为O(n * log10(n))的算法:

     1 #include <stdio.h>
     2 
     3 void statNumber(int n);
     4 
     5 void main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     statNumber(n);
    10 }
    11 void statNumber(int n)
    12 {
    13     int t, i;
    14     int count[10] = {0};
    15     
    16     for(i = 0;i <= n ; i++ ) {
    17         t = i;
    18         if( t == 0 ) {
    19             count[t % 10]++;
    20         }
    21         while(t){
    22             count[t % 10]++;
    23             t /= 10;
    24         }
    25     }
    26     for(i = 0;i < 10;i++)
    27         printf("%d
    ", count[i]);
    28 }
    View Code

    时间复杂度为O(log10(n))的算法:

    第二题

    问题名称:最多约数问题。

    问题描述:正整数x的约数是能整除x的正整数。正整数x的约数个数记为div(x)。例如,1,2,5,10都是正整数10的约数,且div(10)=4。设a和b是2个正整数,a<=b,找出a和b之间约数个数最多的数x。

    数据输入:输入数据由input.txt文件提供,第1行有2个正整数a和b(分开)。

    结果输出:程序运行结束时,若找到的a和b之间约数个数最多的数是x,将div(x)输出到output.txt中。

    1、求素数:

    #include <stdio.h>
    #include <math.h>
    
    int isprime(int n);
    
    int main()
    {
        int n;
        printf("请输入大于1的正整数:
    ");
        scanf("%d", &n);
        while (n <= 1)
        {
            printf("请输入大于1的正整数:
    ");
            scanf("%d", &n);
        }
        printf("%d
    ", isprime(n));
        return 0;
    }
    
    int isprime(int n)
    {
        if (n == 2)
            return true;
        if (n % 2 == 0)        //偶数直接排除
            return false;
        for (int i = 3; i <= sqrt(n); i = i + 2)
        {
            if (n % i == 0)
            {
                return 0;
            }
        }
        return 1;
    }

    2、求一个整型数的位数:

    #include <stdio.h>
    
    int main()
    {
        int n, i;
        scanf("%d", &n);
        for(i = 0; n != 0; i++)
        {
            n /= 10;
        }
        printf("%d
    ", i);    //最后i就是位数
        return 0;
    }

    3、计算两个正整数的最大公约数GCD:

    利用欧几里得算法(辗转相除法):

    int GreatestCommonDivisor(int a, int b)
    {
        if(b == 0)
            return a;
        else
            return GreatestCommonDivisor(b, a % b);        //粗略的理解就是一直除b,直到能除尽,则b是GCD
    }

    4、计算n层嵌套平方根:

    n层嵌套,就有n个根号,就是有n个sqrt。但是目前的算法到一定的精度,就会不在进位,导致n增大,值不变。

    #include <stdio.h>
    #include <math.h>
    
    double square(float x, int n)
    {
        if (n == 1)
        {
            return sqrt(x);
        }
        else
        {
            return sqrt(x + square(x, n - 1));
        }
    }
    
    int main()
    {
        double result = square(4, 5000);
        printf("%f
    ", result);
        return 0;
    }

    数组转置:

    按照原来的顺序输出是:matrix[i][j],那么转置输出就是:matrix[j][i]。

    #include <stdio.h>
    
    #define N 10
    
    void input(int matrix[N][N], int n);
    void transpose(int matrix[N][N], int n);
    void output(int matrix[N][N], int n);
    
    int main()
    {
        int matrix[N][N] = {0};
        int n;
        printf("Input n:
    ");
        scanf("%d", &n);
        printf("Input %d*%d matrix:
    ", n, n);
        input(matrix, n);
        printf("The transposed matrix is:
    ");
        transpose(matrix, n);
        //output(matrix, n);
        return 0;
    }
    void input(int matrix[N][N], int n)
    {
        int i, j;
        for(i = 0; i < n; i++)
        {
            for(j = 0; j < n; j++)
            {
                scanf("%d", &matrix[i][j]);
            }
        }
    }
    void transpose(int matrix[N][N], int n)
    {
        int i, j;
        for(i = 0; i < n; i++)
        {
            for(j = 0; j < n; j++)
            {
                printf("%4d ", matrix[j][i]);
            }
            printf("
    ");
        }
    }
    void output(int matrix[N][N], int n)
    {
        int i, j;
        for(i = 0; i < n; i++)
        {
            for(j = 0; j < n; j++)
            {
                printf("%d ", matrix[i][j]);
            }
            printf("
    ");
        }
    }
  • 相关阅读:
    Python with
    Python else
    Python list
    The Python Debugger Pdb
    RPM 包
    yum
    OpenStack I18N
    Python unittest
    MySQL 行格式
    MySQL 行溢出数据
  • 原文地址:https://www.cnblogs.com/quanxi/p/5998206.html
Copyright © 2011-2022 走看看