当前位置: 首页 > article >正文

鹏哥C语言36-37---循环/分支语句练习(折半查找算法)

#define _CRT_SECURE_NO_WARNINGS
//----------------------------------------------------------------------------------------------------3.4 分支,循环练习
//用代码解决问题=先想办法(编程思维)+再写代码(按照语法形式)

//----------------------------------------------------------------------------------------------------3.4.1. 练习参考代码

#include <stdio.h>
//-----------------------------------------------------------------------------------------1.计算n的阶乘
//---------------------------------------------------while
//int main()
//{
//    int n = 0;
//    int i = 1;
//    int ret = 1;
//    scanf("%d", &n);
//
//    while (i <= n)
//    {
//        ret = ret * i;
//        i++;
//    }
//    printf("%d", ret);
//
//    return 0;
//}

//---------------------------------------------------for

//int main()
//{
//    int n = 0;
//    int i = 1;
//    int ret = 1;
//    scanf("%d", &n);
//
//    for (i = 1; i <= n; i++) 不考虑溢出问题
//    {
//        ret = ret * i;
//    }
//    printf("%d", ret);
//
//    return 0;
//} 

//-----------------------------------------------------------------------------------------2.计算1!+2!+3!+......+10!

// --------------------------------两个 for 循环嵌套效果较差,每次内部循环都重复
//int main()
//{
//    int n = 0;
//    int i = 1;
//    int ret = 1;
//    int ADD = 0;
//
//    for(n=1;n<=3;n++)
//    {
//        ret = 1; // 每次内部循环的时候,必须给 ret 初始化
//        for (i = 1; i <= n; i++) 
//        {
//            ret = ret * i;
//        }
//        ADD = ADD + ret;//   自己老是忘记这个迭代的格式!!!!!!!
//    }
//    printf("%d", ADD);
//
//    return 0;
//} 

// ---------------------------------------------优化
//int main()
//{
//    int n = 0;
//    int ret = 1;
//    int ADD = 0;
//
//    for (n = 1; n <= 3; n++)
//    {
//            ret = ret * n;
//        ADD = ADD + ret;
//    }
//    printf("%d", ADD);
//
//    return 0;
//}

//--------------------------------------------------------------------------------3.从数组中查找数(折半查找算法)
//在一个有序的数组中查找具体的数字

//--------------------------------------------------一个一个找,效率慢
//int main()
//{
//    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//    int k = 0;
//    scanf("%d", &k);
//    int i = 0;
//    int size = sizeof(arr) / sizeof(arr[0]); //  求数组内元素个数,用了好几遍了
//    for(i=0;i<=size;i++)
//    {
//        if (arr[i] == k)
//        {
//            printf("找到了,下标是:%d", i);
//            break;
//        }
//    }
//    if (i >= size)
//        printf("找不到");
//
//    return 0;
//}

//---------------------------------------------------折半查找算法(二分查找)
//代码麻烦,但是效率高,速度快,限制是只能应用于有序数组

/*

int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int k = 0;
    scanf("%d", &k);
    int i = 0;
    int size = sizeof(arr) / sizeof(arr[0]); 
    int left = 0;
    int right = size - 1;
    
    while(left<=right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] < k)
        {
            left = mid + 1;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else
        {
            printf("找到了,下标是:%d", mid);
            break;
        }
    }
    if (left > right)
    {
        printf("找不到");

    }
    return 0;
}

*/

//---------------------------------------------------------------------------3.4.2 从数组中查找数(折半查找算法)
//在一个  有序  的数组中查找具体的数字

//-----------------------------------------------------------------------------折半查找算法(二分查找)
// 每次查找缩小一半范围
//代码麻烦,但是效率高,速度快,限制是只能应用于有序数组

//int main()
//{
//    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//    int k = 0;
//    scanf("%d", &k);
//    int i = 0;
//    int size = sizeof(arr) / sizeof(arr[0]);//求元素个数
//    int left = 0;
//    int right = size - 1;
//
//    while (left <= right) // 关键二:一定是 <=
//    {
//        int mid = (left + right) / 2; // 关键一: 中间值mid  计算 一定要在循环里边
//        //如果 left + right 的值超出了 int 整型所能表达的最大值,会产生位溢出,求得的平均值会不准确
//        // int mid=left+(left+right)/2;  //就避免溢出的问题
//        if (arr[mid] < k)
//        {
//            left = mid + 1;
//        }
//        else if (arr[mid] > k)
//        {
//            right = mid - 1;
//        }
//        else
//        {
//            printf("找到了,下标是:%d", mid);
//            break;
//        }
//    }
//    if (left > right)
//    {
//        printf("找不到");
//
//    }
//    return 0;
//}

//-----------------------------------------------------------------------------------------4.从两端移动,向中间汇聚
//编写代码,演示多个字符从两端移动,向中间汇聚
//welcome to bit!!!
//###############
//w#############! 
//we###########!!
//......
//welcome to bit!!!

#include<windows.h>
#include<stdlib.h>
//
//int main()
//{
//    //  int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //整型数组
//    char arr1[] = "welcome to bit!!!"; //字符数组
//    char arr2[] = "#################";
//
//    int left = 0;
//    int right = strlen(arr1); //strlen  求字符串长度,求的是\0之前的元素个数,
//    //int right = sizeof(arr1) / sizeof(arr1[0])-2; //先减去 \0, 再减去一个下标数
//
//    while(left<=right)
//    {
//        arr2[left] = arr1[left];
//        arr2[right] = arr1[right];
//        printf("%s\n", arr2);//
//        Sleep(1000);// 1000单位是毫秒,需要引用头文件,#include<windows.h>
//        //清空屏幕
//        system("cls");// system是一个库函数,可以执行系统命令, 需要引用头文件,#include<stdlib.h>
//        left++;
//        right--;
//    }
//    printf("%s\n", arr2);
//
//    return 0;
//}


//-----------------------------------------------------------------------------------------------5.模拟用户登录密码
// 编写代码实现,模拟用户登录情景,并且只能登陆三次
//只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序

//比较两个字符串是否相等,不能使用等号,应该使用库函数: strcmp\
//需要引用头文件
#include <string.h>
//如果返回值是 0,表示两个字符串相等


int main()
{
    int i = 0;
    int password[6] = { 0 };

    //假设密码是字符 abcdef
    for (i = 0; i < 3; i++)
    {
        printf("请输入密码:>");
        scanf("%s", password); //数组不需要取地址
        //    if (password == "abcdef") 
        if (strcmp(password, "abcdef") == 0)  //比较两个字符串是否相等,使用库函数 strcmp
        {
            printf("登录成功\n");
            break;
        }
        else
        {
            printf("密码错误\n");
        }
    }
    if (i == 3)
    {
        printf("三次密码均输入错误,退出程序");
    }
    return 0;
}

//今天共接触了三个新的头文件
/*
#include<windows.h>
    Sleep(1000);// 1000单位是毫秒,需要引用头文件,#include<windows.h>

#include<stdlib.h>
    system("cls");// system是一个库函数,可以执行系统命令, 需要引用头文件,#include<stdlib.h>
    cls 清屏

#include <string.h>
     if (strcmp(password ,"abcdef")==0)  //比较两个字符串是否相等,使用库函数 strcmp
*/


 


http://www.kler.cn/a/307318.html

相关文章:

  • 项目风险管理的3大要素
  • Linux screen和cscope工具使用总结
  • 【AI日记】24.11.14 复习和准备 RAG 项目 | JavaScript RAG Web Apps with LlamaIndex
  • Servlet入门 Servlet生命周期 Servlet体系结构
  • 【计算机网络】UDP网络程序
  • Java面向对象编程进阶之包装类
  • RNN股票预测(Pytorch版)
  • 大模型参数高效微调技术原理综述(八)-MAM Adapter、UniPELT
  • Redhat 8,9系(复刻系列) 一键部署Oracle23ai rpm
  • 模型训练的过程中对学习不好的样本怎么处理更合适
  • Qt4Qt5Qt6版本下载(在线和离线)
  • C++ | Leetcode C++题解之第405题数字转换为十六进制数
  • 文本分类实战项目:如何使用NLP构建情感分析模型
  • Element-ui el-table 全局表格排序
  • 腾讯云软件工程师面试问题收集记录-数据库
  • redis简单使用与安装
  • Java并发:互斥锁,读写锁,Condition,StampedLock
  • shopify主题开发之template模板解析
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(3)
  • 蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)
  • 【AIGC】CFG:基于扩散模型分类器差异引导
  • JavaScript 函数 function
  • 用 nextjs 创建 Node+React Demo
  • WebGL入门(048):OES_draw_buffers_indexed 简介、使用方法、示例代码
  • Python---爬虫
  • Leetcode-轮转数组