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

看书看累了写的一个快乐程序,有两个版本的,一个是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);
	 }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值