由一个C++版本猜数字游戏引起的效率问题
来源:互联网 发布:gotv倚天屠龙记ts源码 编辑:程序博客网 时间:2024/06/07 23:44
一直以来C++,C++以其优越的性能,得到了很多编程人员的爱好,但是C++其杰出的一点主要是其效率问题,但是如果不能很好的运用,反而会取得很差的效果,适得其反,因此如何去取得一个好的算法成效,是一个编程者的选择,本文主要通过一个小游戏的开发,从一个点上进行切入分析程序的效率所在
#include
#include
#include
#include
#include
using std::string;
using std::endl;
using std::cin;
using std::cout;
int main()
{
int min,max;
double k=0;
string text="请输入你要猜测的数字的范围";
string text1="猜数字游戏";
cout<<std::setw(50)<<text1<<endl;
cout<<std::setw(60)<<text;
cout<<endl<>";
cin>>min;
cout<<endl<<std::setw(10)<>";
cin>>max;
srand(time(0));
int range=max-min+1;
int date=rand()/100%range+min;
int answer=date;
cout<<endl<>";
cin>>date;
if(max>date&&mink)
{
k=(k+max)/2;
if(k==date)
cout<<std::setw(20)<<"恭喜你,答对了"<<endl<<date;
else
cout<<std::setw(10)<<"对不起,系统出错!"<<endl;
}
else
{
do
{
k=(k+min)/2;
}
while(k==date);
cout<<"恭喜你,答对了"<<endl<<date;
}
}
else
{
cout<<endl<<"对不起你猜测的数字不正确^-^"
<>"<<answer<<endl;
cout<<" 下次再来哦!祝贺你下次成功! "<<endl;
cout<<std::setw(400)<<"制作人----冬瓜";
return 0;
}
return 0;
}
上面这段程序没有去采用任何的方式进行程序的优化,只是在程序的核心部分采用了一个二分法去实现数字的搜索,虽然从一定程度上面能够达到高效率,但是在整体上面运行效果方面却有点搪塞,下文采用二叉树的整数划分树形先根序搜索方式去写了一段程序,程度代码如下:
#include
#defineMAX10000000
#defineSL25
int t[MAX], m = 0, num = 0;
void hf(int n, int *t)//整数划分生成树的线性表存储的函数;
{
int i;
if(n) {
for(i = 1; i <= n; i++) {
t[m++] = i;
hf(n-i,t);
}
}
else {
t[m++] = '#';
num++;
}
}
void print(int *t)//打印整数划分生成树的线性表;
{
int l;
printf("Array T is:\n");
for(l = 0; l >",k);
for(i = 0; i < len; i++)
printf(" %d", S[i]);
printf("\n");
k++;
}
void scan(int *t)//扫描存储树的线性表生成可识别的组合结果;
{
int S[SL] = {0}, S1[SL] = {0}, S2[SL] = {0};
int i, leap = 1, top = 0, top1 = 0, top2 = 0;
int z1 = 0, z2 = 0;
for(i = 0; i < m; i++) {
if(leap) {
if(t[i] != '#')
S[top++] = t[i];
else {
leap = 0;
print_s(S,top);
}
}
else {
if(t[i] != '#') {
S1[top1] = t[i];
z1 = z1 + S1[top1];
top1++;
}
else {
while(z1 != z2) {
S2[top2] = S[--top];
S[top] = 0;
z2 = z2 + S2[top2];
S2[top2] = 0;
top2++;
}
top2 = 0;
while(top1) {
S2[top2++] = S1[--top1];
S1[top1] = 0;
}
while(top2) {
S[top++] = S2[--top2];
S2[top2] = 0;
}
print_s(S,top);
z1 = z2 = 0;
}
}
}
}
int main()//整数划分主函数;
{
int n;
printf("Enter n:");
scanf("%d",&n);
hf(n,t);
print(t);
scan(t);
return 0;
}
两段程序对比后,读者可以仔细的研究一下,程度2采用一个整数划分树形先根序搜索的方式去完成了,程序才代码的美观性,效率性方面可以看出,其远远超过代码1的执行效率,主要其在优化方面做的很好,达到了一个健壮的效果。
结束语:本文虽然为从算法执行的时间复杂度上面去分析整个程序,但读者可以看出,2个同样的程序,在运用不同算法执行后,其真正的效率问题也就无形中显示出来了。
更多详情
- 由一个C++版本猜数字游戏引起的效率问题
- 一个由模板函数引起的问题
- 一个由__GNUC__引起的编译问题
- 由Lucene版本不同引起的一些问题
- 由主键和序列号设置而引起的一个问题
- 一个由进程内存布局异常引起的问题
- 一个由进程内存布局异常引起的问题
- 一个由进程内存布局异常引起的问题
- 一个由进程内存布局异常引起的问题
- 由一个多线程共享Integer类变量问题引起的。。。
- 由 TypeInitializationException 引起的问题
- 由Ftp引起的问题
- 一个由于bouncycastle版本不同引起的问题
- 一个猜数字的游戏
- 一个由sscanf函数引起的bug
- c语言实现一个猜数字游戏。
- 由“Indexing Service”服务引起的问题
- 由显示器问题引起的死机
- hibernate 提高数据库性能
- “艳门照”事件催生了在线照片合成发展
- Bash脚本之if-then语句
- SSH web开发架构(转载)
- Java线程池使用说明
- 由一个C++版本猜数字游戏引起的效率问题
- 数据结构基础(4)————next数组的理解
- “莫须有”搜索引擎优化(SEO)的迷信
- pat 1022
- 黑马程序员-------多态
- leetcode LRUCache
- “莫须有”的搜索引擎优化(SEO)迷信
- js中容易出错的地方
- 点击显示菜单 下拉菜单