C语言 百炼成钢4

//题目10:打印楼梯,同时在楼梯上方打印两个笑脸。 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>


//分析:楼梯,打印阶梯形状,涉及到行列,for循环

void main6(){
    //假设个台阶,每个台阶宽3个单位,高3个单位
    //笑脸的字符是'1'
    //5个台阶,总高度就是5*3=15,同理宽度也是15
    //第一行,宽度是4*3=12,从12开始打印*号
    //行(y轴)
    int temp = 0;
    int temp2 = 0;
    char ch = '1';
    for (int i = 0; i < 11; i++)
    {
        temp = 8 - i / 2 * 2;
        if (temp + 4>11)
        {
            temp2 = 11;
        }
        else
        {
            temp2 = temp + 4;
        }
        //x轴
        for (int j = 0; j < 11; j++)
        {
            if (j>(temp-1)&&j<(temp+3))
            {
                //开始打印*号
                if (!(i % 2))
                {
                    //打印3个*号
                    printf("*");
                }
                else{
                    //打印1个*号
                    if (j == temp)
                    {
                        printf("*");
                    }
                    else{
                        printf(" ");
                    }
                }
            }
            else{
                if (j == (temp -1))
                {
                    if ((i % 2))
                    {
                        printf("%c", ch);
                        //printf("#");
                    }
                    else{
                        printf(" ");
                    }
                }
                else{
                    printf(" ");
                }
                
            }
            
        }
        printf("
");
    }


    system("pause");
}

//题目11:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
//后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//分析:通过观察发现,1、1、2、3、5、8、13、21,n个月兔子的对数==(n-1)个月兔子的对数+(n-2)个月兔子的对数
//这就是斐波那契数列,抽象为f(n)=f(n-1)+f(n-2)
//可以使用递归,也可以使用数组


//方法1
int getnum(int n){
    if (n==2)
    {
        return 1;
    }
    if (n==1)
    {
        return 1;
    }
    return getnum(n - 1) + getnum(n - 2);
}

void main(){
    //方法1
    //printf("%d", getnum(8)*2);

    //方法2,使用数组,动态分配内存
    int num = 0;
    scanf("%d",&num);
    int *p = malloc(num * sizeof(int));
    //循环给数组赋值
    for (int i = 0; i < num; i++)
    {
        if (i==0)
        {
            *(p + i) = 1;
        }
        else{
            if (i==1)
            {
                *(p + i) = 1;
            }
            else{
                *(p + i) = *(p + i - 1) + *(p + i - 2);
            }
        }
        printf("%d
", *(p + i));
    }



    system("pause");
}

//题目12:判断101-200之间有多少个素数,并输出所有素数。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//分析:素数:质数(prime number)又称素数,有无限个。除了1和它本身以外不再有其他的因数;否则称为合数。
//想法做2个循环,一个循环101--200;第二个循环从1到某个数

void main(){
    int index = 0;
    int k = 0;
    for (int i = 101; i < 201; i++)
    {
        //使得每次循环的量减少一半
        k =(int) sqrt(i + 1);
        int tenp = 1;
        for (int j = 2; j <= k; j++)
        {
            if (i%j==0)
            {
                tenp = 0;
                //说明可以整除,说明是合数,不是质数
                break;
            }
        }
        if (tenp)
        {
            index++;
            printf("
%d",i);
        }
    }
    printf("
质数的总个数是%d",index);
    system("pause");
}

原文地址:https://www.cnblogs.com/zhanggaofeng/p/5148238.html