无聊写的快乐小尺子,二分法实现

看书看累了写的一个快乐程序,有两个版本的,一个是system(“pause”)终止的,一个是cin.get()终止的。是一个二分法做小尺子的,灵感来自c++primer plus上但是比他更好的完全自己写的程序。

虽然看上去很多,但是很多行都是用来暂停时间的,main函数的最后6行是两个版本的区别,改一下那里的注释即可

//ruler.cpp
#include"iostream"//a symbol of ricrision program
#include"ctime"
const int Max = 101;
void dichotomy(char x[],int level,int high,int low);
int main()
{
	//using namespace std;//pratice not using it. 
	 int Len,Divs;//那么这里就有个问题,前者是不是必须要偶数呢? 
	std::cout <<"这是一个通过二分法设计的尺子\n请输入想要的尺子的长度(不超过100的正偶数)和二分的次数:";
	//std::cin >> Len >> Divs;
	while(!(std::cin >> Len>> Divs))
	{
		std::cin.clear();
		while(std::cin.get()!='\n')
		;
	/*if()
	{
		std::cout << "等我康康\n"; 
		break;
	}*/
//	else
	//{
		std::cout << "⊙﹏⊙∥不,这数据不正常,emm请重新输入吧\n输入你想要的尺子的长度(不超过100的正偶数)和二分的次数哦:";
//	}
	}
	clock_t delay = CLOCKS_PER_SEC;
	while(1)
	{
		std::cout << "等一下!让我康康(^~^)";
		clock_t start = clock();
		for(int i = 0;i<3;i++)
		{
		std::cout <<  ". ";
		while(clock()-start < delay*0.5)
		;
		}
	if(Len > 100||Len<=0)
	{
	std::cout << "长度过大,请重新指定!\n请输入长度:";
	std::cin >> Len;
	}
	else if(Len%2)
	{
		std::cout << "非正偶数影响美观哦\n请重新输入长度和次数:";
		std::cin >> Len >>Divs; 
	}
	else
	{
	std::cout << "输入正确啦v(^_^)v\n" << "正在准备原材料\n";
		for(int i = 0;i<3;i++)
		{
		std::cout << ". ";
		start = clock();
		while(clock()-start < delay*0.7)
		;
		}
		std::cout << "正在加工\n";
		for(int i = 0;i<3;i++)
		{
		std::cout << ". ";
		start = clock();
		while(clock()-start < delay*0.7)
		;
		}std::cout << "正在偷偷运输\n";
				for(int i = 0;i<3;i++)
		{
		std::cout << ". ";
		start = clock();
		while(clock()-start < delay*0.7)
		;
		}
		std::cout <<"当当当当!\n";
		while(clock()-start < delay*0.7)
		;
	break;
	}
	}
	char x[Max];
	for (int i = 0;i<Len;i++)
	{
		x[i] = ' ';
	}
	x[Len] = '\0';
	int low = 0,high = Len-1;
	x[low] = x[high] = '|';
	std::cout << x <<"\n\n";
	for (int i = 1;i<=Divs;i++)
		{
		dichotomy(x,i,high,low);
		std::cout << x<< std::endl<<std::endl;
		}
		//std::cout << "快乐时间结束了,嘿嘿。\n";//注释这两行是get()版本
		//system("pause");
		std::cout << "快乐时间结束了,但是我猜你一定想不到可以输入回车结束程序,嘿嘿。";//去掉上面两行注释并且注释这三行则是system版本
		std::cin.get();
		std::cin.get();
	return 0;
 } 
 
 void dichotomy(char x[],int level,int high,int low)
 {
 	if(level == 0)
 	return;
 	else
 	{
 		int mid = (high+low)/2;
 		x[mid] = '|';
 		dichotomy(x,level-1,mid,low);
 		dichotomy(x,level-1,high,mid);
	 }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最小二分法(也称为二分查找)是一种查找算法,可以在有序数组中查找一个特定的元素。它的思想是将数组分成两个部分,然后判断要查找的元素在哪个部分,再继续在该部分中进行查找,直到找到要查找的元素或者确定该元素不存在于数组中。 以下是最小二分法的C语言实现: ```c int binarySearch(int arr[], int l, int r, int x) { while (l <= r) { int mid = l + (r - l) / 2; // 如果 x 被找到,返回 mid if (arr[mid] == x) return mid; // 如果 x 在左半边,继续搜索左半边 if (arr[mid] > x) r = mid - 1; // 如果 x 在右半边,继续搜索右半边 else l = mid + 1; } // 如果 x 没有被找到,返回 -1 return -1; } ``` 该函数接受四个参数:一个有序数组 `arr`,数组的左边界 `l`,数组的右边界 `r`,以及要查找的元素 `x`。函数使用一个 while 循环来查找元素,如果找到了元素,返回该元素在数组中的下标;如果没有找到,则返回 -1。 这个实现中的关键是 `mid`,它是左边界和右边界的中间值。随着每次循环的迭代,`mid` 会不断地更新。如果 `mid` 对应的元素等于要查找的元素,函数会返回 `mid`;如果 `mid` 对应的元素大于要查找的元素,说明要查找的元素在左半边,`r` 会更新为 `mid - 1`;如果 `mid` 对应的元素小于要查找的元素,说明要查找的元素在右半边,`l` 会更新为 `mid + 1`。最终,如果要查找的元素没有被找到,函数会返回 -1。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值