关于24点游戏的编程思路与基本算法

From: http://blog.csdn.net/wangqiulin123456/article/details/8145545

 

    24点游戏的算法,其中最主要的思想就是穷举法。所谓穷举法就是列出4个数字加减乘除的各种可能性,包括括号的算法。我们可以将表达式分成以下几种:首先我们将4个数设为a,b,c,d,,其中算术符号有+,-,*,/,。其中有效的表达式有a,ab-cd,等等。列出所有有效的表达式。其中我们用枚举类型将符号定义成数字常量,比如用1表示+,2表示-等。如下是我对穷举法的一种编程语言。在编程的头部要对变量做下定义。其中a,b,c,d的范围是1到10。这就需要在定义变量的时候要有限制。在vc++中的编程中,在定义控件的变量范围可以直接填写变量的最大和最小,在此编程中的最大是10,最小是1。这就给编程写语句带来了方便。 

     运用C/C++语言开发工具Microsoft Visual C++ 6.0,利用它简单、明了的开发特点对课本知识进行系统的实践,并且通过对各个知识点的运用进行所需的程序编写。首先,要充分理解每个程序涉及的算法,牢记实现算法的每一个步骤;其次,再在计算机上利用C语言编写出代码,要求结构清晰,一目了然;最后,要对程序进行优化,使程序实现优秀的运行功能。在编写程序的过程中要充分理解并能熟练使用对应的算法,竟可能多的涉及课本中的知识点。总之通过实行整体方案,最终使程序达到运行状态,并且实现良好的运行效果。

     故做了如下的计划安排,将这项工程分为两大部分:程序的设计和程序的调试。

首先在程序的设计部分由分为几个步骤:
  • 第一步:查阅有关归并排序算法的资料。
  • 第二步:设计这个项目的整体架构和算法。
  • 第三步:选择一门程序设计语言进行算法的描述。
其次,进行程序的调试。

设计方法和内容


在做某件事时,一个好的方法往往能起到事半功倍的效果。在这个课程的设计上,我选择了C++语言作为算法的描述语言,因为C++语言具有丰富的表达能力以及代码的高效性,并且有着良好的移植性和灵活性。同时,采用“自顶向下,个个击破”的程序设计思路和思想,充分运用C++语言强大的功能。使该课程设计做起来更加的简单。

我将这个课程设计整体分成了两个部分。一个是数据结构定义部分和算法部分。这两大部分有机的结合共同构成了该课程设计的程序,运行该程序就可以将该课程设计的功能实现了。

程序的设计思想和内容

(一)算法一:


24点游戏的算法,其中最主要的思想就是穷举法。所谓穷举法就是列出4个数字加减乘除的各种可能性。我们可以将表达式分成以下几种:首先我们将4个数设为a,b,c,d,,将其排序列出四个数的所有排序序列组合(共有A44=24种组合)。再进行符号的排列表达式,其中算术符号有+,—,*,/,(,)。其中有效的表达式有a*(b-c/b),a*b-c*d,等等。列出所有有效的表达式。其中我们用枚举类型将符号定义成数字常量。如下是我对穷举法的一种编程语言。在编程的头部要对变量做下定义。其中a,b,c,d的范围是1到10。这就需要在定义变量的时候要有限制。在vc++中的MFC编程中,在定义控件的变量范围可以直接填写变量的最大和最小,在此编程中的最大是10,最小是1。这就给编程写语句带来了方便(因为其自动会生成语句)。下面我介绍下穷举法的主要实现,我们知道要实现24点的算法,就是通过4个数字,4个运算符号和2对括号(最多为2对),通过各种组合判断其结果是否为24。我们用a,b,c,d代替4个数字。考虑每种可能,总的算法就有7种可能。分别为:

1没括号的(形如a*b*c*d);

2有括号的(形如(a * b) * c * d);

3有括号的(形如(a * b * c) * d);

4有括号的(形如a * (b * c) * d);

5有括号的(形如(a * b) * (c * d));

6有括号的(形如((a * b) * c) * d);

7有括号的(形如(a * (b * c)) * d)。

接下来就是对每一种进行分析判断。

以上就是穷举法的基本实现算法

首先穷举的可行性问题。我把表达式如下分成三类:

1、 列出四个数的所有排序序列组合(共有A44=24种组合)。

2、 构筑一个函数,列出所有运算表达式。

3、 输入数据计算。


(二)算法二:


24点游戏的算法,还有另外一种算法。

把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算。在求表达式的过程中,最难处理的就是对括号的处理,而这种思路很好的避免了对括号的处理。基于这种思路的一种算法:

因为能使用的4种运算符 – * / 都是2元运算符,所以本文中只考虑2元运算符。2元运算符接收两个参数,输出计算结果,输出的结果参与后续的计算。

  由上所述,构造所有可能的表达式的算法如下:

  (1) 将4个整数放入数组中

  (2) 在数组中取两个数字的排列,共有 P(4,2) 种排列。对每一个排列,

  (2.1) 对 – * / 每一个运算符,

  (2.1.1) 根据此排列的两个数字和运算符,计算结果

  (2.1.2) 改表数组:将此排列的两个数字从数组中去除掉,将 2.1.1 计算的结果放入数组中

  (2.1.3) 对新的数组,重复步骤 2

  (2.1.4) 恢复数组:将此排列的两个数字加入数组中,将 2.1.1 计算的结果从数组中去除掉

  可见这是一个递归过程。步骤 2 就是递归函数。当数组中只剩下一个数字的时候,这就是表达式的最终结果,此时递归结束。

  在程序中,一定要注意递归的现场保护和恢复,也就是递归调用之前与之后,现场状态应该保持一致。在上述算法中,递归现场就是指数组,2.1.2 改变数组以进行下一层递归调用,2.1.3 则恢复数组,以确保当前递归调用获得下一个正确的排列。

  括号 () 的作用只是改变运算符的优先级,也就是运算符的计算顺序。所以在以上算法中,无需考虑括号。括号只是在输出时需加以考虑。

[cpp] view plaincopyprint?
  1. void Find(int n) {  
  2.     if (n == 1) {  
  3.         if ( fabs(number[0] - VOLUE) <= LING ) //对于除法,要小心小数的精确位数   
  4.         { cout << exp[0] << "\t\t";  
  5.         m_judge = true;  
  6.         count ++;  
  7.         if((count % 3)==0) //使输出时每行三个表达式   
  8.             cout<<endl;  
  9.         }  
  10.         else  
  11.         { }  
  12.     }  
  13.     for(int i=0; i < n; i++) {  
  14.         for (int j = i + 1; j < n; j++) {  
  15.             double a, b;  
  16.             string expa, expb;  
  17.             a = number[i];  
  18.             b = number[j];  
  19.             number[j] = number[n - 1]; //递归之后,n比以前小一位,所以可以不停向前赋值   
  20.             expa = exp[i];  
  21.             expb = exp[j];  
  22.             exp[j] = exp[n - 1]; //递归之后,n比以前小一位,所以可以不停向前赋值   
  23.             exp[i]= '('+ expa + '+' + expb + ')'//加法不需要分顺序   
  24.             number[i] = a + b;  
  25.             Find(n-1);  
  26.             exp[i]='('+ expa+ '-' + expb + ')'//减法应该分顺序,减数以及被减数   
  27.             number[i] = a - b;  
  28.             Find(n-1);  
  29.             exp[i] = '('+expb + '-' + expa + ')'//减法应该分顺序,减数以及被减数   
  30.             number[i] = b -a;  
  31.             Find(n-1);  
  32.             exp[i]= '('+ expa +'*'+ expb+ ')'//乘法不需要分顺序   
  33.             number[i]=a*b;  
  34.             Find(n-1);  
  35.             if (b != 0) {  
  36.                 exp[i] ='('+expa+'/' + expb + ')'//除法应该分顺序,除数以及被除数   
  37.                 number[i] = a / b;  
  38.                 Find(n-1);  
  39.             }  
  40.             if (a != 0) {  
  41.                 exp[i]='('+expb + '/'+ expa + ')'//除法应该分顺序,除数以及被除数   
  42.                 number[i] = b / a;  
  43.                 Find(n-1);  
  44.             }  
  45.             number[i] =a; //这4句语句是为了防止如果上面几种可能都失败了的话,   
  46.             number[j]=b; //就把原来的赋值撤消回去,以无干扰的正确的进入到下一次   
  47.             exp[i] = expa; //for循环队列中。   
  48.             exp[j] = expb; //   
  49.         }  
  50.     }  
  51. }  
void Find(int n) {
if (n == 1) {
if ( fabs(number[0] - VOLUE) <= LING ) //对于除法,要小心小数的精确位数
{ cout << exp[0] << "\t\t";
m_judge = true;
count ++;
if((count % 3)==0) //使输出时每行三个表达式
cout<<endl;
}
else
{ }
}
for(int i=0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
double a, b;
string expa, expb;
a = number[i];
b = number[j];
number[j] = number[n - 1]; //递归之后,n比以前小一位,所以可以不停向前赋值
expa = exp[i];
expb = exp[j];
exp[j] = exp[n - 1]; //递归之后,n比以前小一位,所以可以不停向前赋值
exp[i]= '('+ expa + '+' + expb + ')'; //加法不需要分顺序
number[i] = a + b;
Find(n-1);
exp[i]='('+ expa+ '-' + expb + ')'; //减法应该分顺序,减数以及被减数
number[i] = a - b;
Find(n-1);
exp[i] = '('+expb + '-' + expa + ')'; //减法应该分顺序,减数以及被减数
number[i] = b -a;
Find(n-1);
exp[i]= '('+ expa +'*'+ expb+ ')'; //乘法不需要分顺序
number[i]=a*b;
Find(n-1);
if (b != 0) {
exp[i] ='('+expa+'/' + expb + ')'; //除法应该分顺序,除数以及被除数
number[i] = a / b;
Find(n-1);
}
if (a != 0) {
exp[i]='('+expb + '/'+ expa + ')'; //除法应该分顺序,除数以及被除数
number[i] = b / a;
Find(n-1);
}
number[i] =a; //这4句语句是为了防止如果上面几种可能都失败了的话,
number[j]=b; //就把原来的赋值撤消回去,以无干扰的正确的进入到下一次
exp[i] = expa; //for循环队列中。
exp[j] = expb; //
}
}
}

附录A 原程序代码

算法一:

[cpp] view plaincopyprint?
  1. #include <iostream>   
  2. using namespace std;  
  3. int main()  
  4. float a,b,c,d;  
  5. m_ret: //做标记   
  6. cout<<"请输入4个数据"<<endl;  
  7. cout<<" 第一个数:";  
  8. cin>>a;  
  9. cout<<" 第二个数:";  
  10. cin>>b;  
  11. cout<<" 第三个数:";  
  12. cin>>c;  
  13. cout<<" 第四个数:";  
  14. cin>>d;  
  15. cout<<"输出所有算法如下:"<<endl;  
  16. if ((a<0)||(a>10)||(b<0)||(b>10)||(c<0)||(c>10)||(d<0)||(d>10))  
  17. { cout<<"你输入的输入不对,重新输入"<<endl;  
  18. goto m_ret; } // 返回标记,重复输入   
  19. int Calculate ( float x, float y, float z, float w); // a .b.c.d 的所有排列组合情况   
  20. Calculate(a,b,c,d); Calculate(a,b,d,c); Calculate(a,c,d,b);  
  21. Calculate(a,c,b,d); Calculate(a,d,b,c); Calculate(a,d,c,b);  
  22. Calculate(b,a,c,d); Calculate(b,a,d,c); Calculate(b,c,a,d);  
  23. Calculate(b,c,d,a); Calculate(b,d,c,a); Calculate(b,d,a,c);  
  24. Calculate(c,a,b,d); Calculate(c,a,d,b); Calculate(c,b,d,a);  
  25. Calculate(c,b,a,d); Calculate(c,d,a,b); Calculate(c,d,b,a);  
  26. Calculate(d,a,b,c); Calculate(d,a,c,b); Calculate(d,b,c,a);  
  27. Calculate(d,b,a,c); Calculate(d,c,a,b); Calculate(d,c,b,a);  
  28. return 0; }  
  29. int Calculate ( float x, float y, float z, float w) //运算表达式的所有情况   
  30. {   
  31.     if (x+y+z+w==24) cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;  
  32.     else if (x+y+z-w==24) cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;  
  33.     else if ((x+y)*(z+w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;  
  34.     else if ((x-y)*(z+w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;  
  35.     else if ((x-y)*(z-w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;  
  36.     else if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl;  
  37.     else if ((x-y-z)*w==24) cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;  
  38.     else if ((x+y-z)*w==24) cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;  
  39.     else if ((x*y*z)/w==24) cout<<"("<<x<<"*"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;  
  40.     else if ((x*y)*(z+w)==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;  
  41.     else if ((x*y)*(z-w)==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;  
  42.     else if ((x*y)*z-w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")-"<<w<<"=24"<<endl;  
  43.     else if ((x*y)*z+w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")+"<<w<<"=24"<<endl;  
  44.     else if (x*y*z*w==24) cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl;  
  45.     else if ((x+y)+(z/w)==24) cout<<"("<<x<<"+"<<y<<")+("<<z<<"/"<<w<<")"<<"=24"<<endl;  
  46.     else if ((x+y)*(z/w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"/"<<w<<")"<<"=24"<<endl;  
  47.     else if ((x*y)+z+w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl;  
  48.     else if ((x*y)+z-w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"-"<<w<<"=24"<<endl;  
  49.     else if ((x*y)-(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;  
  50.     else if ((x*y)+(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;  
  51.     else if ((x*y)-z-w==24) cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl;  
  52.     else if ((x*y)+(z*w)==24) cout<<"("<<x<<"*"<<y<<")+("<<z<<"*"<<w<<")"<<"=24"<<endl;  
  53.     else if ((x*y)-(z*w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"*"<<w<<")"<<"=24"<<endl;  
  54.     else if ((x*y)/(z*w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"*"<<w<<")"<<"=24"<<endl;  
  55.     else if ((x*y)/(z-w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"-"<<w<<")"<<"=24"<<endl;  
  56.     else if ((x*y)/(z+w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"+"<<w<<")"<<"=24"<<endl;  
  57.     else cout<<"不可以组成24"<<endl;  
  58. return 0;   
  59. }  
#include <iostream>
using namespace std;
int main()
{ float a,b,c,d;
m_ret: //做标记
cout<<"请输入4个数据"<<endl;
cout<<" 第一个数:";
cin>>a;
cout<<" 第二个数:";
cin>>b;
cout<<" 第三个数:";
cin>>c;
cout<<" 第四个数:";
cin>>d;
cout<<"输出所有算法如下:"<<endl;
if ((a<0)||(a>10)||(b<0)||(b>10)||(c<0)||(c>10)||(d<0)||(d>10))
{ cout<<"你输入的输入不对,重新输入"<<endl;
goto m_ret; } // 返回标记,重复输入
int Calculate ( float x, float y, float z, float w); // a .b.c.d 的所有排列组合情况
Calculate(a,b,c,d); Calculate(a,b,d,c); Calculate(a,c,d,b);
Calculate(a,c,b,d); Calculate(a,d,b,c); Calculate(a,d,c,b);
Calculate(b,a,c,d); Calculate(b,a,d,c); Calculate(b,c,a,d);
Calculate(b,c,d,a); Calculate(b,d,c,a); Calculate(b,d,a,c);
Calculate(c,a,b,d); Calculate(c,a,d,b); Calculate(c,b,d,a);
Calculate(c,b,a,d); Calculate(c,d,a,b); Calculate(c,d,b,a);
Calculate(d,a,b,c); Calculate(d,a,c,b); Calculate(d,b,c,a);
Calculate(d,b,a,c); Calculate(d,c,a,b); Calculate(d,c,b,a);
return 0; }
int Calculate ( float x, float y, float z, float w) //运算表达式的所有情况
{ 
if (x+y+z+w==24) cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;
else if (x+y+z-w==24) cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;
else if ((x+y)*(z+w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
else if ((x-y)*(z+w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
else if ((x-y)*(z-w)==24) cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;
else if ((x+y+z)*w==24) cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl;
else if ((x-y-z)*w==24) cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
else if ((x+y-z)*w==24) cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
else if ((x*y*z)/w==24) cout<<"("<<x<<"*"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;
else if ((x*y)*(z+w)==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
else if ((x*y)*(z-w)==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;
else if ((x*y)*z-w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")-"<<w<<"=24"<<endl;
else if ((x*y)*z+w==24) cout<<"("<<x<<"*"<<y<<")*("<<z<<")+"<<w<<"=24"<<endl;
else if (x*y*z*w==24) cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl;
else if ((x+y)+(z/w)==24) cout<<"("<<x<<"+"<<y<<")+("<<z<<"/"<<w<<")"<<"=24"<<endl;
else if ((x+y)*(z/w)==24) cout<<"("<<x<<"+"<<y<<")*("<<z<<"/"<<w<<")"<<"=24"<<endl;
else if ((x*y)+z+w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"+"<<w<<"=24"<<endl;
else if ((x*y)+z-w==24) cout<<"("<<x<<"*"<<y<<")+"<<z<<"-"<<w<<"=24"<<endl;
else if ((x*y)-(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;
else if ((x*y)+(z/w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"/"<<w<<")"<<"=24"<<endl;
else if ((x*y)-z-w==24) cout<<"("<<x<<"*"<<y<<")-"<<z<<"-"<<w<<"=24"<<endl;
else if ((x*y)+(z*w)==24) cout<<"("<<x<<"*"<<y<<")+("<<z<<"*"<<w<<")"<<"=24"<<endl;
else if ((x*y)-(z*w)==24) cout<<"("<<x<<"*"<<y<<")-("<<z<<"*"<<w<<")"<<"=24"<<endl;
else if ((x*y)/(z*w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"*"<<w<<")"<<"=24"<<endl;
else if ((x*y)/(z-w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"-"<<w<<")"<<"=24"<<endl;
else if ((x*y)/(z+w)==24) cout<<"("<<x<<"*"<<y<<")/("<<z<<"+"<<w<<")"<<"=24"<<endl;
else cout<<"不可以组成24"<<endl;
return 0; 
}

算法二:

[cpp] view plaincopyprint?
  1. #include <iostream>   
  2. #include <string>   
  3. #include <math.h>   
  4. using namespace std;  
  5. const double LING = 1E-6;  
  6. const int CONT = 4;  
  7. const int VOLUE = 24;  
  8. double number[CONT];  
  9. string expression[CONT];  
  10. bool m_judge = false//判断是否有解。   
  11. int count = 0;  
  12. void Find(int n)  
  13. {  
  14.     if (n == 1)  
  15.     {  
  16.         if ( fabs(number[0] - VOLUE) <= LING )  
  17.         {  
  18.             cout << expression[0] << "\t\t";  
  19.             m_judge = true;  
  20.             count ++;  
  21.             if((count % 3)==0) //使输出时每行三个表达式   
  22.                 cout<<endl;  
  23.         }  
  24.         else  
  25.         { }  
  26.     }  
  27.     for(int i=0; i < n; i++)//查找   
  28.     {  
  29.         for (int j = i + 1; j < n; j++)//与其后面的查找进行计算   
  30.         {  
  31.             double a, b;  
  32.             string expressiona, expressionb;  
  33.             a = number[i];  
  34.             b = number[j];  
  35.             number[j] = number[n - 1];  
  36.             expressiona = expression[i];  
  37.             expressionb = expression[j];  
  38.             expression[j] = expression[n - 1];  
  39.             expression[i]= '('+ expressiona + '+' + expressionb + ')';  
  40.             number[i] = a + b;  
  41.             Find(n-1);  
  42.             expression[i]='('+ expressiona+ '-' + expressionb + ')';  
  43.             number[i] = a - b;  
  44.             Find(n-1);  
  45.             expression[i] = '('+expressionb + '-' + expressiona + ')';  
  46.             number[i] = b -a;  
  47.             Find(n-1);  
  48.             expression[i]= '('+ expressiona +'*'+ expressionb+ ')';  
  49.             number[i]=a*b;  
  50.             Find(n-1);  
  51.             if (b != 0)  
  52.             {  
  53.                 expression[i] ='('+expressiona+'/' + expressionb + ')';  
  54.                 number[i] = a / b;  
  55.                 Find(n-1);  
  56.             }  
  57.             if (a != 0)  
  58.             {  
  59.                 expression[i]='('+expressionb + '/'+ expressiona + ')';  
  60.                 number[i] = b / a;  
  61.                 Find(n-1);  
  62.             }  
  63.             number[i] =a;  
  64.             number[j]=b;  
  65.             expression[i] = expressiona;  
  66.             expression[j] = expressionb;  
  67.         }  
  68.     }  
  69. }  
  70. int main()  
  71. {  
  72.     cout<<"请输入四个数:\n";  
  73.     for (int i = 0; i < CONT; i++)  
  74.     {  
  75.         char ch[20];  
  76.         cout<<"第"<<i+1<<"个数:";  
  77.         cin >>number[i];  
  78.         itoa(number[i],ch, 10); //itoa()函数的作用是把第一个参数(数值)传送(转换)到第二个参数(字符串)中去,第三个参数(int型)是该数值在字符串里以什么进制存放。   
  79.         expression[i] = ch;  
  80.     }  
  81.     cout<<endl;  
  82.     Find(CONT) ;  
  83.     if(m_judge==true)  
  84.     {  
  85.         cout << "\n成功!" << endl;  
  86.         cout<<"总共的计算方法共有: "<<count<<endl;  
  87.     }  
  88.     else  
  89.     {  
  90.         cout << "失败!" << endl;  
  91.     }  
  92.     return 0;  
  93. }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xtreme TaskPanel

原文来自方案网 http://www.fanganwang.com/Product-detail-item-1230.html&#xff0c;欢迎转载。 关键字&#xff1a;TaskPanel Codejock Xtreme TaskPanel为Windows开发者提供了一个非常熟悉的任务栏&#xff0c;与Windows资源管理器类似。该任务面板可以像VS.NET工具一样被…

linux设备驱动之按键外部中断

老习惯先贴一波代码再仔细分析消化。 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <linux/irq.h> #include <asm/uaccess.h> #includ…

C语言实现ICMP协议Ping命令

From: http://www.360doc.com/content/12/0429/19/1317564_207540510.shtml 大部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法。在这篇文章中&#xff0c;作者将介绍如何用C语言编写一个模拟ping命令功能的程序。ping命令是用来查看网络上另一个主机…

Ubuntu 时间同步

1. 安装ntpdate工具# sudo apt-get install ntpdate2. 设置系统时间与网络时间同步# ntpdate cn.pool.ntp.org

vscode tab键快捷生成元素html标签

按照上图在设置中找到对应的文件夹&#xff0c; 直接加上"emmet.triggerExpansionOnTab": true,这段代码保存 重新打开vscode即可

Linux用ICMP协议实现简单Ping网络监测功能

From: http://www.linuxidc.com/Linux/2012-05/61073.htm ICMP是&#xff08;Internet Control Message Protocol&#xff09;Internet控制报文协议。它是TCP/IP协议族的一个子协议&#xff0c;用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路…

解决vscode格式化代码html属性换行问题; ctrl+s格式化去除分号,格式化自动单引号;解决js格式化换行问题;mac上的settings.json完整配置

右键格式化文档或者ctrl s保存 html不换行 1.安装两个插件①vetur ②Prettier - Code formatter 2.在vetur的settings.json中设置 配置ctrls触发格式化去除分号和单引号&#xff1b;配置格式化js换行&#xff1b;配置解决html属性换行 将最后一部分的设置&#xff0c;修改…

微信分享接口

看着微信分享的 demo 好纠结啊。。。不知道怎么去触发他。哪位大神可以指点一下。。。点击按钮弹出分享js不太懂。。搞了半天也没搞出来。。请教大家。wx.ready(function () {wx.onMenuShareTimeline({title: window.shareData.tTitle,link: window.shareData.timeLineLink,img…

OSI网络七层简义

OSI网络七层 1:物理层:如网卡,光纤,线览 2.数据链路层:交换机,记录MAC地址与内网IP 3.网络层:路由器,负责记录公网IP,如PPPOE拨号,固定IP 4.传输层:代理软件,如Apache代理80端口,SVN 3690端口等等 5.会话层,6.表现层是由第7层应用层决定转载于:https://blog.51cto.com/kongdq/9…

uniapp使用iconfont字体图标

vue引入字体图标看这篇 本文介绍两种方案&#xff1a;一、使用iconfont字体图标 二、使用icon图片 情景1&#xff1a;使用灰色的字体图标 方案一&#xff1a;使用iconfont字体图标 步骤1&#xff1a;下载iconfont 步骤2&#xff1a;解压后只需要将ifonfont.css这一个文件 &am…

linux中断pollselcet按键处理机制

在上一篇linux按键中断处理中&#xff0c;我们采用按键中断处理获取按键&#xff0c;在read函数中阻塞读取&#xff0c;当按键发生时&#xff0c;read自动解除阻塞&#xff0c;实现应用层读取到相应的按键值。在上一节中如果没有按键到来&#xff0c;应用层会一直阻塞等待在rea…

04:求整数的和与均值

总时间限制: 1000ms内存限制: 65536kB描述读入n&#xff08;1 < n < 10000&#xff09;个整数&#xff0c;求它们的和与均值。 输入输入第一行是一个整数n&#xff0c;表示有n个整数。第2~n1行每行包含1个整数。每个整数的绝对值均不超过10000。输出输出一行&#xff0c;…

Yeslab现任明教教主ISE课程前七部分免费发布

Yeslab现任明教教主ISE课程1-7部分免费发布 网盘&#xff1a;http://ref.so/p63jl转载于:https://blog.51cto.com/ielab/967536

socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF

From: http://blog.csdn.net/jasonliuvip/article/details/22591531 最近在看《linux高性能服务器编程》&#xff0c;在此做个日记&#xff0c;以激励自己&#xff0c;同时分享于有需要的朋友。 1. 读取和设置socket文件描述符属性&#xff1a; [cpp] view plaincopy#include …

linux 文件按照大小排列

从大往小排列 ls -lhS 从小往大排列 ls -lhSr 来源&#xff1a; http://www.shuaizhu.com/wordpress/linux%E7%B3%BB%E7%BB%9F%E4%B8%8B%EF%BC%8C%E6%8C%89%E6%96%87%E4%BB%B6%E7%9A%84%E5%A4%A7%E5%B0%8F%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%E7%9A%84%E5%91%BD%E4%BB%A4…

Media所有参数汇总

Media所有参数汇总 我们最常需要用到的媒体查询器的三个特性&#xff0c;大于&#xff0c;等于&#xff0c;小于的写法。媒体查询器的全部功能肯定不止这三个功能&#xff0c;下面是我总结的它的一些参数用法解释&#xff1a; width:浏览器可视宽度。 height:浏览器可视高度。…

jni中native通过adb输出

本文主要实践了如何在jni中打印log&#xff0c;贴源码&#xff1a; Android.mk主要是巴拉的android源码中的app LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS) #TARGET_PLATFORM : android-3 #LOCAL_SDK_VERSION : 19 LOCAL_MODULE : libnative LOCAL_SRC_FILES : …

[Windows]7种网络编程I/O模型代码实现实例

From: http://blog.csdn.net/woshinia/article/details/8585930 部分代码参考《[WINDOWS网络与通信程序设计].王艳平》&#xff0c;网络中一些I/O模型的代码都没有对socket是否可写做过深入研究&#xff0c;我这边会提供一些解决方法。 阻塞模式下&#xff0c;send会发生阻塞…

VScode配置eslint保存自动格式化,eslint格式化去掉分号和双引号。vscode自动保存去掉分号和双引号;““

本文是开启eslint检验和配置eslint格式化&#xff1b;如果想要关闭eslint&#xff0c;查看这篇关闭eslint方法&#xff1b; 1.必须安装的三个插件eslint&#xff0c; prettier-Code formatter &#xff0c;vetur 2.配置setting.json 3.直接将下方代码复制&#xff0c;黏…

不要手贱自己去通过Javascript画html界面

IE就是一坨屎 不要使用原生的Javascript去画HTML. 使用类库&#xff0c;比如Juqery. 千万别手贱&#xff01; 原因之一 JS 通过CreateElement 动态生成的代码&#xff0c;使用setAttribute插入已有CSS样式不起作用 &#xff08;IE 6 - 8&#xff09;. 转载于:https://www.cnbl…