第二周学习笔记

首先本周学习的内容可能比较少,在这里先学姐说一声抱歉了。

拿第一题来说,对于杨辉三角,首先要注意的是
1.数组大小
2.数组的初始化
3.边界条件
4.考虑敲代码的过程中,运算的时间 
 然后在这里我就不强调那些基础的知识了,只是强调一下我如何优化一下我的代码吧
首先要使用数学公式∶许多题目以杨辉三角为例吧,就是每他们都有许多的规律和性质,例如每一行的首字母元素都是一当前的第二个元素,等于上一行的第i- 1个元素和第I个元素之和,因此可以利用这个规律和性质使用计算公式来计算。
然后还有一个去使用位运算,但是位运算的话,本人正在学习,可能不是很懂,所以不过多的赘述了

#include <stdio.h>

void generate_pascal_triangle(int n) 
{
    int triangle[n][n];
    
    for (int i = 0; i < n; i++) 
	{
        triangle[i][0] = 1;
        triangle[i][i] = 1;
    }
   
    for (int i = 2; i < n; i++) {
        for (int j = 1; j < i; j++) {
            triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ", triangle[i][j]);
        }
        printf("\n");
    }
}

int main()
 {
    int n;
    printf("请输入要生成的杨辉三角形的行数n(1<=n<=34): ");
    scanf("%d", &n);
    generate_pascal_triangle(n);
    
    return 0;
}

本人在这星期学习如何将各种语句正确的使用,比如说条件语句中你可以用多分支语句,嵌套语句或,不嵌套这三种情况,同时也可以利用三元运算符把他们都代替,但是需要一个逻辑上的清晰也是后面需要加强。就比如说契波道题,这道题可能比较简单,可以利用三元运算符,将条件语句换掉但是本人在这里没用三元运算符。所以下一步本人还需要加强一下逻辑上的能力。

#include <stdio.h>

int f(int n)
 {
    if (n <= 0)
	 {
        return 0;
    } 
	else if (n == 1) 
	{
        return 1;
    } else 
	{
        return f(n - 1) + f(n - 2);
    }
}

void F(int n) 
{
    if (n <= 0) 
	{
        printf("请输入大于0的整数!");
        return;
    }
    
    for (int i = 0; i < n; i++) {
        printf("%d ", f(i));
    }
    printf("\n");
}

int main() 
{
    int n = 10;
    F(n);
    return 0;
}

本人也学习了一些关于冒泡顺序的知识点,说一句题外话,一开始用的是没有,直接看什么语言就直接学了关于冒泡顺序的JAVA语句,但本人一直用C语言去编译,去去敲,搞了两三天也没有搞出来,最后发现离了个大谱。同时,冒泡程序的底层逻辑还是比较简单的

一个是循环的次数
二个是循环次数中比较的次数
因为冒号顺序给我的感觉是简单但效率比较低的一个排序算法
再接下来我要去学习,怎么去优化一下冒泡顺序的一些算法。我插入我敲的冒泡顺序。

#include <stdio.h>

void b(int arr[], int n) 
{
    int i, j, tmp;
    for (i = 0; i < n - 1; i++) 
    {
        for (j = 0; j < n - 1 - i; j++) 
        {
            if (arr[j] > arr[j + 1]) 
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}

int main() 
{
    int arr[] = {5, 2, 8, 6, 1, 9, 3, 7};
    int n = sizeof(arr) / sizeof(int);
    
    b(arr, n);

    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值