zoukankan      html  css  js  c++  java
  • 基础练习

     I 0-1字符串

    对于长度为N位(N<32)的一格字符串,每一位都可能是0或1,请从小到大输出者2^N种01字符串

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        char *t = (char *)malloc(sizeof(char)*(n+1));
        memset(t,'0',n);
        t[n] = '';
        for(int i=0;i<(1 << n);i++)//2^n次
        {
            puts(t);
            t[n-1] += 1;
            if(t[n-1] > '1')
            {
                for(int j=2;j<=n;j++)
                {
                    t[n-j] += 1;
                    t[n-j+1] ='0';
                    if(t[n-j] == '1')
                        break;
                }
            }
        }
        return 0;
    }

    II杨辉三角形

    杨辉三角形又称Paskal三角形,它的第i+1行是(a+b)^i的展开式的系数,给出n,输出它的前n行

    样例输入:4

    样例输出:

    1

    1 1

    1 2 1

    1 3 3 1

    分析:三角形的每个数字等于它的两肩上的数字相加

    //f(i,1)=f(i,i)=1
    //f(i,k)=f(i,k-1)+f(i,k)(1<k<i,i>2)
    #include <stdio.h>
    int f[34][34];
    int main()
    {
        int n;
        scanf("%d",&n);
        if(n == 1)
        {
            printf("1
    ");
        }
        else if(n == 2){
            printf("1
    1 1
    ");
        }
        else{
            printf("1
    ");
            for(int t=1;t<n;t++)
                f[t][0] = f[t][t] = 1;
            for(int i=1;i<n;i++)
            {
                for(int j=0;j<=i;j++)
                {
                    if(j == 0)
                        printf("1 ");
                    else if(j == i){
                        printf("1
    ");
                    }
                    else{
                        f[i][j] = f[i-1][j-1] + f[i-1][j];
                        printf("%d ",f[i][j]);
                    }
                }
            }
        }
    
        return 0;
    }

     III特殊回文数

    输入一个正整数n(<=54),编程求所有的5位和6位十进制回文数,满足各位数字之和等于n,按从小到大的顺序输出满足条件的整数,每个整数占一行

    分析:取对称的3位数字,满足各位数字之和为n的即为对应的回文数

    #include <stdio.h>
    int main()
    {
        int n,a,b,c;
        scanf("%d",&n);
        for(a=1;a<10;a++)
            for(b=0;b<10;b++)
                for(c=0;c<10;c++)
                {
                    if(2*(a + b) + c == n)
                        printf("%d
    ",a*10001+b*1010+c*100);//5位回文数
                }
        for(a=1;a<10;a++)
            for(b=0;b<10;b++)
                for(c=0;c<10;c++)
                {
                    if(2*(a + b + c) == n)
                        printf("%d
    ",a*100001+b*10010+c*1100);//6位回文数
                }
        return 0;
    }
  • 相关阅读:
    转贴:C语言链表基本操作
    硬盘上的一些算法小题目||and今天看了下林锐的书以及gdb调试 及一些变成算法小题目
    MFC入门 002 滚动条Scorllbar 数字控制框 Spin 进度条 Progress
    002 Windows数据类型 字符集
    001 Windows 简介
    MFC入门 001 Edit&Button&List&ComboBox
    iPads和iPones的Media Queries
    响应式网页设计
    chrome developer tool 调试技巧
    返回一个整型数组中最大子数组的和(02)
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5223638.html
Copyright © 2011-2022 走看看