折半查找来了,折半查找是一个重点知识,在工作中会频繁使用,
一定要记住
注意:折半查找前提序列要是一个有序数列,升序或降序
下面看一个题
在有序数组中查找某个数字n,求其下标
#include<stdio.h> #include<stdlib.h> int main(){ //折半查找,假设为升序 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int tofind = 5; int left = 0; int right = sizeof(arr) / sizeof(arr[0]) - 1; while (left <= right){ int mid = (left+right) / 2; if (tofind < arr[mid]){ right = mid - 1; } else if (tofind > arr[mid]){ left = mid + 1; } else{ printf("下标为%d\n", mid); break; } } //没有这个数的情况 if (left > right){ printf("没找到这个数\n"); } system("pause"); return 0; }
猜数字游戏
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> int menu(){ printf("########################\n"); printf("####开始游戏请输入1####\n"); printf("####结束游戏请输入2####\n"); printf("########################\n"); printf("请输入你的选择:\n"); int choice = 0; scanf("%d", &choice); return choice; } void game(){ //生成一个1-100的随机整数 int toGuess = rand() % 100 + 1; while (1){ printf("请输入要猜的数字:\n"); int input;/*保存用户输入数*/ scanf("%d", &input); if (input < toGuess){ printf("低了!\n"); } else if (input > toGuess){ printf("高了!\n"); } else{ printf("猜对了!\n"); break; } } } int main(){ //设置随机种子,使用时间戳time(0) srand(time(0)); while (1){ int choice = menu(); if (choice == 1){ game(); } else if (choice == 2){ printf("程序退出,再见\n"); break; } else { printf("你的输入有误,请重新输入\n"); } } system("pause"); return 0; }
扩展知识:
rand()函数生成一个随机整数,但是是伪随机,每次生成的都一个相同的随机整数序列
需要程序已启动就设置一个随机种子srand();
且使用时间戳time(0);
小驼峰命名法: toGuess
大驼峰命名法: ToGuess
驼峰命名法是常用的命名法,好用就完事
原文:https://www.cnblogs.com/enjoyC/p/14536355.html