zoukankan      html  css  js  c++  java
  • 一些简单的C语言算法

    1.

    要求输入一个正整数,打印下述图形

    输入:5

    输出:

    *

    **

    ***

    ****

    *****

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int num,i,j;

        scanf("%d",&num);

        for(i=1;i<=num;i++)

        {

            for(j=1;j<i+1;j++)

            {

                printf("*");

            }

            printf(" ");

        }

        return 0;

    }

    2.

    要求输入一个正整数,打印下述图形

    输入:5

    输出:

              *

            **

          ***

        ****

      *****

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int num,i,j,k;

        scanf("%d",&num);

        for(i=1;i<=num;i++)

        {

            for(j=1;j<=num-i;j++)

            {

                printf(" ");

            }

            for(k=1;k<i+1;k++)

            {

                printf("*");

            }

            printf(" ");

        }

        return 0;

    }

    3.

    要求输入一个正整数,打印下述图形

    输入:5

    输出:

            *

          ***

        *****

      *******

    *********

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int num,i,j,k,l;

        scanf("%d",&num);

        for(i=1;i<=num;i++)

        {

            for(j=1;j<=num-i;j++)

            {

                printf(" ");

            }

            for(k=1;k<i*2-1+1;k++)

            {

                printf("*");

            }

            for(l=1;l<=num-i;l++)

            {

                printf(" ");

            }

            printf(" ");

        }

        return 0;

    }

    4.

    要求输入一个正整数,打印下述图形

    输入:5

    输出:

                ABBBB

             AABBB

          AAABB

       AAAAB

    AAAAA

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int num,i,j,k,l;

        scanf("%d",&num);

        for(i=1;i<=num;i++)

        {

            for(j=1;j<=num-i;j++)

            {

                printf(" ");

            }

            for(k=1;k<i+1;k++)

            {

                printf("A");

            }

            for(l=1;l<=num-i;l++)

            {

                printf("B");

            }

            printf(" ");

        }

        return 0;

    }

    5.

    要求输入一个正整数,判断是否是质数(质数也叫素数)

    输入:5

    输出:是素数

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int nu,i;

        scanf("%d",&nu);

        for (i=2; i<nu; i++)

        {

            if(nu%i == 0)

            {

                break;                      //能除尽就说明了不是质数

            }

        }

        if(i == nu )                        //如果等于nu证明是没遇到因数

        {

            printf("是质数");

        }

        else

        {

            printf("不是质数");

        }    

        return 0;

    }

    6.

    要求输入两个正整数,求两个数的最大公约数

    //最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个

    输入:6 3

    输出:3

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int i,numA,numB,mix;

        scanf("%d,%d",&numA,&numB);

        mix=(numA<numb)?numA:numB;

        for (i=mix; i>=1; i--)                 

        {

            if (numA%i == 0 && numB%i == 0)

            {

                break;

            }

        }

        printf(“%d”,i);//得到i结果就是最大公约数

        return 0;

    }

    7.

    要求输入两个正整数,求两个数的最小公倍数

    输入:6 3

    输出:6

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int numa,numb,max;

        scanf("%d,%d",&numa,&numb);

        max=(numa<numb)?numa:numb;

        while(1)                 //找出最小的刚能整除两个数的数就是最小公倍数

        {

            if (max%numa == 0 && max%numb == 0)

            {

                break;

            }

            max++;

        }

        printf("%d",max);

        return 0;

    }

    8.

    要求输入一个正整数,分解质因数

    分解质因素:将一个合数分解成为几个质数的乘积。

    输入:8

    输出:2 2 2 

    注:8=2*2*2

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int nu;

        scanf("%d",&nu);

        for (int i=2; i<=nu; i++) {

            if (nu%i == 0) { //用找出最小的因数(i)

                printf("%d ",i);

                nu/=i; //得到

                i--;

            }

        }  

        return 0;

    }

    9.

    要求输入两个正整数n,a,如果n==3, a == 2;

    输出 2 + 22 + 222 的值。(不用输出式子)

    m=5,n=a

    3+33+333+3333+33333

    10*3+3

    10*33+3

    ret=10*ret+a

    sum=sum+ret

    输入:3

    输出:246

    注:246=2+22+222

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int m,a;

        scanf("%d %d",&m,&a);

        

        int sum=0;

        int ret=0;

        

        for (int i=1; i<=m; i++)

        {

            ret=10*ret+a;               //ret为当前的值,如3,33,333,3333

            sum=sum+ret;

        }

        printf("%d ",sum);

        return 0;

    }

    10.

    五位数中,对称的数称为回文数,找出10000到99999所有的回文数。

    如12321

    注:运行你就可以看到效果

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        // insert code here...

        for (int i=10000; i<=99999; i++)

        {

            int bita,bitb,bitc,bitd;

            //12345 % 10=5

            bita=i%10;

            //12345/10=1234 1234%10=4

            bitb=i/10%10;

            //12345/1000=123 12%10=2

            bitc=i/1000%10;

            //12345/10000=1 1%10=1

            bitd=i/10000%10;

            if (bita==bitd && bitb==bitc)

            {

                printf("%d ",i);

            }

        }

        return 0;

    }

    11.

    输入任意多个整数,最后一个数是0,输出这些数中最大的数。

    思想:每次输入一个数,进行比较,每次保存当前最大数。

    输入:5 4 3 9 0

    输出:最大值为:9

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int nu,max;

        scanf("%d",&nu);

        max=nu;             //暂定第一个数为最大值,很好的思想

        while (1)

        {

            scanf("%d",&nu);

            if (nu == 0)

            {

                break;

            }

            if (max < nu)

            {

                max=nu;

            }

        }

        printf("最大值为:%d",max);

        return 0;

    }

    12.

    要求输入一个正整数,求这个数的阶乘。

    输入:3

    输出:6

    注:6=1*2*3

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        int num1,i,sum=1;

        scanf("%d",&num1);

        for(i=1;i<=num1;i++)

        {

            sum*=i;

        }

        printf("%d ",sum);

        return 0;

    }

    13.

    要求输入一个(int 范围内)整形数字,逆序输出10进制. 

    输入:84521

    输出:12458

    实现代码如下:

    #include <stdio.h>

    int main(int argc, const char * argv[]) {

        

        int num1,i=0,shu[64],j;

        scanf("%d",&num1);

        //把这个数的每一位都拿出来,拿完后刚好把顺序排好了

        while(1)

        {

            shu[i]=num1%10;

            num1=num1/10;

            i++;

            if(num1 == 0)

            {

                break;

            }

        }

        //把摆好顺序的数的每一位都打印出来

        for(j=0;j<i;j++)

        {

            printf("%d",shu[j]);

        }

        printf(" ");

        return 0;

    }

  • 相关阅读:
    C风格字符串大写转小写
    指针的引用在函数中的应用
    Debug和Release区别
    差分约束系统(System Of Difference Constraints)
    poj_2299UltraQuickSort && poj_1804Brainman
    计算几何基础——矢量和叉积
    推荐ALGORITHM专题
    后缀数组之倍增法
    静态邻接表的简单实现
    归并排序&&树状数组求逆序数
  • 原文地址:https://www.cnblogs.com/xiao-c-2016/p/5900479.html
Copyright © 2011-2022 走看看