zoukankan      html  css  js  c++  java
  • 典题

    都是自己写的,如果代码有不好的地方,望请指出,哥只是一个小菜。这里将收集我自己觉得需要花点脑经的题目。题目会不断的累加,以便自己不断的积累编程经验和编程的一些技巧和思想。

    1.实现一个函数,传递一个整形参数,如果这个整数可以分解成连续的自然数相加,则把所有的可能输出,否则,输出无法分解。
    例如:
    输入:15
    输出:
    15 = 1+2+3+4+5
    15 = 4+5+6
    15 = 7+8
    输入:4
    输出:无法分解

    哥的源码:

    #include <stdio.h>

    void func(n)

    {

        int i;

        int j;

        int sums;

        int flag =0;

        int k;

        int show =0;

        for(i=1;i <= n/2;i++)

        {

            flag = 0;

            sums =0;

            for(j=i;j <= n/2+1;j++)

            {

                sums += j;

                if(sums==n)

                {

                    flag =1;

                    show =1;

                    break;

                }

                

            }

            if(flag ==1)

            {

                printf("%d=",n);

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

                {

                    printf("%d",k);

                    if(k<j)printf("+");

                }

                printf(" ");

                

            }

            

        }

        if(show==0)

          printf("无法分解");

    }

    int main(void)

    {

        int n;

        scanf("%d",&n);

        

        func(n);

        

        return 0;

    }

    2.实现一个函数,传递一个整数参数,返回这个整数参数的阶乘的末尾有多少个0,并在main函数里输出。
    例如:
    输入:9
    输出:1
    输入:3
    输出:0
    输入:788
    输出:195

    哥的源码:

    /*#include <stdio.h>

    #include <math.h>

    int sum(int n)

    {

        int i=0;

        int j=0;

        int s=0;

        int b =n;

        while(n>=5)

        {

            n /= 5;

            i++;

        }

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

        {

            s += b/pow(5,j);

        }

        return s;

    }

    int main(void)

    {

        int n;

        scanf("%d",&n);

        printf("%d",sum(n));

        return 0;

    }*/

    3.  输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限 
    比如:
    输入:5 18 
    输出:
    1 2 3 4 5
    16 17 18 0 6 
    15 0 0 0 7
    14 0 0 0 8
    13 12 11 10 9

    输入: 4 12 
    输出:
    1 2 3 4
    12 0 0 5
    11 0 0 6
    10 9 8 7

    哥写的源码:

    #include <stdio.h>

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

    {

        int n, m;

        

        int arr[20][20];

        

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

        

        int j;

        int i;

        int rdes = n;

        int ddes = n;

        int ldes = 0;

        int udes = 1;  // 赋值方向

        

        int type = 1;

        

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

        {

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

            {

               arr[i][j]= 0;

            }

        }

        i=1;

        while(i <= m)

        {

           

            switch(type)

            {

                case 1: // 向右

                    for(j=ldes; j<rdes; j++,i++)//0-5

                    {

                        arr[ldes][j] = i; // 赋值

                        if(i==m)

                        {

                            i++;

                            break;

                        }

                    }

                    type = 2;

                    rdes--;  //4

                    break;

                case 2: // 向下

                    for(j=udes; j<ddes; j++,i++)  //1-5

                    {

                        arr[j][rdes] = i;

                        if(i==m)

                        {

                            i++;

                            break;

                        }

                    }

                    type = 3;

                    ddes --;  //4

                    break;

                case 3:  // 向左

                    for (j=rdes-1; j>=ldes; j--,i++)

                    {

                        arr[rdes][j] = i;

                        if(i == m)

                        {

                            i++;

                            break;

                        }

                    }

                    type = 4;

                    ldes++;

                    break;

                case 4:  // 向上

                    for (j=ddes-1; j>=udes; j--,i++)

                    {

                        arr[j][ldes-1] = i;

                        if(i == m)

                        {

                            i++;

                            break;

                        }

                    }

                    type = 1;

                    udes++;

                    break;

            }

        }

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

        {

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

            {

                printf("%5d",arr[i][j]);

            }

            printf(" ");

        }

        

        return 0;

    }

    4. 输入十个数,任意相邻的两个数不同,输出所有的递增,递减序列 
    比如:
    输入:1 5 9 8 12 21 3 0 -1 9 
    输出:
    1 5 9
    9 8
    8 12 21
    21 3 0 -1
    -1 9

    输入: 3 9 8 -11 4 21 8 -3 0 2 
    输出:
    3 9
    9 8 -11 
    -11 4 21
    21 8 -3
    -3 0 2

    哥写的源码:

    #include <stdio.h>

    int main(void)

    {

        int a[11] ={0};

        int i;

        int j=0;

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

        {

            scanf("%d",&a[i]);

        }

        int flag =1;

        int k = 0;

        for (i=1; i<=9; i++) {

            if((a[i-1]<a[i]&&a[i]>a[i+1])||(a[i-1]>a[i]&&a[i]<a[i+1])|| i==9)

            {

                flag = 0;

                j = i;

            }

            if(flag == 0)

            {

                for( ;k<=j;k++)

                {

                    printf("%d ",a[k]);

                }

                printf(" ");

                k = j;

                flag = 1;

            }

            

        }

        return 0;

    }

  • 相关阅读:
    HTTP状态码
    python 连接 MySQL 数据库
    JS事件基础和绑定
    7月13号:2D的转换和过渡,动画效果设置
    JS事件流
    7月14日:JS的基础语法
    JS对表单的操作
    7月16日:DOM总结
    DOM样式表
    7月9号
  • 原文地址:https://www.cnblogs.com/Ohero/p/3870274.html
Copyright © 2011-2022 走看看