首页 > 编程语言 >学C笔记归纳 第十篇——循环算法优化

学C笔记归纳 第十篇——循环算法优化

时间:2023-12-10 13:44:22浏览次数:45  
标签:arr int 第十篇 笔记 算法 len printf input sizeof

练习1:求1!+2!+...+10!

一般算法:双层循环,外层1~10,内层计算每个数的阶乘,在外层把阶乘相加。

int main()
{
    int i = 0;
    int j = 0;
    int jc = 1;

    int sum = 0;
    for (i = 1; i <= 10; i++)
    {
        jc = 1;//
        for (j = 1; j <= i; j++)
        {
            jc = jc * j;
        }
        sum = sum + jc;
    }
    printf("%d %d\n", jc,sum);
    return 0;
}
 

算法优化:1~10递增,其阶乘比上一个多乘一个,在这过程中相加,一层循环即可。

int main()
{
    int i = 0;
    int jc = 1;
    int sum = 0;
    for (i = 1; i <= 10; i++)
    {
        jc = jc * i;
        sum = sum + jc;
    }
    printf("%d %d\n", jc, sum);
    return 0;
}

 

 

 

 练习2:有序数组查找, 报数,在数组中查找,输出其下标

一般算法:遍历数组,if条件判断输出。

int main()
{
    int input = 0;
    scanf("%d", &input);
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    int len = sizeof(arr) / sizeof(arr[0]);  //求出数组长度
    printf("%d\n", sizeof(arr));
    printf("len=%d\n", len);
    int i = 0;
    for (i = 0; i < len; i++)
    {
        if (input == arr[i])
        {
            
            printf("下标为:%d\n", i);
            break;
        }
    }
    if (i == len)
    {
        printf("i=%d\n",i);
        printf("out of this area");
    }
        
    return 0;
}

未能利用 “有序” 这个条件

算法优化:一层循环用 二分法 折半查找,每次查找少一半数据,效率高。

 

int main()
{
    int input = 0;
    scanf("%d", &input);
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    int len = sizeof(arr) / sizeof(arr[0]);  //求出数组长度
    printf("%d\n", sizeof(arr));
    printf("len=%d\n", len);
    int left = 0;
    int right = len - 1;
    int mid = 0;
    while (left <= right)
    {
        mid = (left + right) / 2;
        if (arr[mid] < input)
        {
            left = mid + 1;
        }
        if (arr[mid] > input)
        {
            right = mid - 1;
        }
        if (input == arr[mid])
        {
            printf("找到了,下标为:%d\n", mid);
            break;
        }

    }
    if (left > right)
        printf("out of this area");
    return 0;
}

 

 

 

 

标签:arr,int,第十篇,笔记,算法,len,printf,input,sizeof
From: https://www.cnblogs.com/xiaowanglong/p/17892561.html

相关文章

  • python算法
    目录: 回溯算法:  回溯算法:一般模型:results=[]defbacktrack(路径,选择列表):passif路径结束,满足约束条件:results.append(路径)#保存结果return#注意,返回到上一个分支,而不是返回结果,退出回溯if路径结束,不满足约束条件:......
  • Treap 学习笔记
    二叉查找树二叉查找树是一棵有点权的二叉树,具有以下几个特征:左孩子的权值小于父亲的权值右孩子的权值大于父亲的权值中序遍历及从小到大排序二叉查找树支持以下几个操作:插入一个数删除一个数找一个数的前驱找一个数的后继询问一个数的排名询问排第几名的数二叉查......
  • 人工智能基础 - 机器学习算法分类
    监督学习在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不......
  • 学习笔记
    1.线段树平衡树进阶线段树分裂:按某个标准将线段树从某一条从根到叶子的路径处裂开,分成左、右两棵树。时间复杂度证明:由于线段树分裂时仅和一条从根到叶子的路径上的点有关,而树高为$O(\log{n})$,所以时间复杂度为$O(\log{n})$,且分裂一次会新建$O(\log{n})$个节点,所以分裂$......
  • .net中加解密用BouncyCastle就够了,支持常用的各种加密解密算法
    BouncyCastle是一个流行的Java加解密库,也支持在.NET平台上使用。下面是BouncyCastle在.NET下使用的一些常见功能,包括AES、RSA、MD5、SHA1、DES、SHA256、SHA384、SHA512等。在开始之前,请确保你已经将BouncyCastle的NuGet包安装到你的项目中。你可以通过NuGet......
  • 读程序员的README笔记06_测试(上)
    1. 行为准则2. 编写、运行和修复测试用例会让人感觉很忙碌2.1. 测试本身才更容易成为繁忙的工作2.2. 糟糕的测试会增加开发人员的开销而不提供价值,并且还会增加测试套件的不稳定性3. 测试用途3.1. 测试可以检查代码是否正常工作3.1.1. 测试本身就可以验证软件的行......
  • Git的学习笔记
    Git的简单介绍‍Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目‍Git的常用命令命令名称作用gitconfig--globaluser.name'用户名'设置用户签名gitconfig--globaluser.email'邮箱'设置用户签名gitinit初始......
  • 字符串杂乱笔记
    字符串哈希将字符串的信息压缩到一个信息里面,一般压成一个值。多项式哈希:形如\(h(s)=\sum\limits^{\left|s\right|}_{i=1}s_ibase^{i-1}\)的哈希。例:"abbab",使a为\(1\),b为\(2\),base为\(7\),注:直接用s[i]-'a'会使得a的值为\(0\),导致a,aa,aaa值相同。所以用s[i]......
  • 深度解读DBSCAN聚类算法:技术与实战全解析
    探索DBSCAN算法的内涵与应用,本文详述其理论基础、关键参数、实战案例及最佳实践,揭示如何有效利用DBSCAN处理复杂数据集,突破传统聚类限制。关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里......
  • 《卓有成效的程序员》读书笔记3
    《卓有成效的程序员》就是这样一本教你如何变懒的书,在机制部分,主要介绍了一些能帮助大家提升效率的工具,思想。个人总结:1、Mac系统上使用QuickSilver加快程序的启动。2、尽量少的使用鼠标,甚至都不要使用上下左右的按键,因为这些手势都会导致效率的下降。3、使用Vim作为文本编......