1014_练习(猜数游戏,折半查找)
1.猜数字游戏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.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.产生一个1-100的随机数
//用time函数产生随机数
srand((unsigned int)time(NULL));
int result = rand(1) % 100 + 1;
//2.提示玩家输入一个猜测的数字
while (1){
printf("请输入您所猜的数字:");
int num = 0;
scanf("%d", &num);
//3.比较两个数字,提示玩家猜测猜高/低/正确
if (num < result){
printf("请输入大一点的数字呐~\n\n");
}
else if (num>result){
printf("请输入小一点的数字呐~\n\n");
}
else{
printf("恭喜您,通关啦!(撒花^o^)\n");
}
}
//4.(1)猜测正确,出现恭喜界面^u^
// (2)猜测错误,提示玩家再猜一次
}
int main(){
while (1){
int choice = Menu();
if (choice == 1){
Game();
}
if (choice == 2){
printf("您已经退出游戏啦!\n");
break;
}
else{
printf("输入错误啦!没有这个选项呢>_<\n");
}
}
system("pause");
return 0;
}
运行结果:
2.在整型有序数组中查找想要的数字,找到了返回下标,找不到做出提示
//折半查找是一种效率较高的查找方法,折半查找要求线性表必须采用顺序存储
//结构,而且表中元素按关键字有序排列。
//第一次循环left->0 ,right-> sizeof(arr)/sizeof(arr[0])-1
//answer > arr[mid],则查找[mid+1,left]
// < arr[mid],则查找[0,mid-1]
#include <stdio.h>
#include <stdlib.h>
int main(){
int arr[10] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
int left = 0;
//计算数组中最后一个元素的下标
int right = sizeof(arr) / sizeof(arr[0]) - 1;
//把想要查找的数字存储在answer中
int answer = 7;
int mid = 0;
while (left <= right){
mid = left + right;
if (arr[mid] < answer){
left = mid+1;
}
else if (arr[mid]>answer){
right = mid-1;
}
else
break;
}
if (left <= right){
printf("恭喜您找到啦~:arr[%d]=%d\n", mid, arr[mid]);
}
else
printf("找不到\n");
}
运行结果: