php实现 24点游戏算法

一、总结

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

二、24点游戏算法

题目描述

问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出:
true or false

输入描述:

输入4个int整数

输出描述:

返回能否得到24点,能输出true,不能输出false

示例1

输入

复制

7 2 1 10

输出

复制

true

解答一:

DFS搜索

 #include <stdio.h>
#include <algorithm>
using namespace std;
const int N=;
int num[N];
int isSolve=;
void dfs(int index,int currentNum,int arr[])
{
        if(currentNum==)
        {
                isSolve=;
                return;
        }
        if(isSolve||currentNum>||index>=)
                return;
        for(int operFlag=;operFlag<;operFlag++)
        {
                switch(operFlag)
                {
                        case :
                                dfs(index+,currentNum+arr[index],arr);
                                break;
                        case :
                                dfs(index+,currentNum-arr[index],arr);
                                break;
                        case :
                                dfs(index+,currentNum*arr[index],arr);
                                break;
                        case :
                                dfs(index+,currentNum/arr[index],arr);
                                break;
                }
                if(isSolve)
                        return;
        }
}
int main()
{
        while(scanf("%d%d%d%d",&num[],&num[],&num[],&num[])>)
        {
                isSolve=;
                sort(num,num+);
                do
                {
                        dfs(,num[],num);
                        if(isSolve)
                                break;
                } while (next_permutation(num,num+));
                if(isSolve)
                        printf("true\n");
                else
                        printf("false\n");
        }
        return ;
}

解答二:

//搞了半天原来是可以有括号的,全排列+递归就可以了,而全排列本身又可以递归来做。
//不要忘记恢复现场就行。
#include<iostream>
using namespace std;
 
inline void Swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}
 
bool is24(int a[], int begin, int end, double tot)
{
    if (begin==end-) return (a[begin] == tot);
    else
    {
        bool ans = false;
        for (int i = begin; i<end; i++)
        {
            swap(a[i], a[end-]);
            ans = ans || is24(a, begin, end - , tot + a[end - ]) || is24(a, begin, end - , tot - a[end - ]) || is24(a, begin, end - , tot * a[end - ]) || is24(a, begin, end - , tot / a[end - ]);
            swap(a[i], a[end-]);
        }
        return ans;
    }
 
 
}
 
int main()
{
    int a[];
    while (cin >> a[] >> a[] >> a[]>>a[])
    {
        if (is24(a, ,, )) cout << "true" << endl;
        else cout << "false" << endl;
    }
}

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

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 则恢复数组,以确保当前递归调用获得下一个正确的排列。

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

  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. }

附录A 原程序代码

算法一:

  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. }

算法二:

    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. }
 
 

php实现 24点游戏算法的更多相关文章

  1. 【Nodejs】“快算24”扑克牌游戏算法

    算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...

  2. 【Nodejs】“快算24”扑克牌游戏算法 1.02

    快算24是一种挺好的锻炼孩子算数能力的扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过有限四则运算得到结果24,四张牌必须仅用一次.各地玩法还有点差别,有的只算1-10,其它抽出来:有的地方把整幅牌都 ...

  3. 【Nodejs】“快算24”扑克牌游戏算法 1.01

    考虑到1.00版本需要改源码变更四个数字,这版修改了一下变成控制台输入了. 先把两个数四则运算得到结果想清楚就是C2代码,三个数就是C3,四个数就是C4.简单的代码简单,却是复杂的基础:复杂的脱胎于简 ...

  4. 24点游戏(24 game)的C++编程求解实现

    什么是24点游戏 24点游戏,英文叫做24 game,是对给定的4个非负整数进行加减乘除运算,要求每个数都要被用到且仅用到一次,并得到最终的运算结果为24.比如3.8.3.8这四个数,可以找出唯一的一 ...

  5. 经典趣味24点游戏程序设计(python)

    一.游戏玩法介绍: 24点游戏是儿时玩的主要益智类游戏之一,玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24.例如,2,3,4,6,通过( ( ( 4 + 6 ) - ...

  6. cdoj 1252 24点游戏 dfs

    24点游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1252 Descr ...

  7. 24点游戏&&速算24点(dfs)

    24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  8. 24点游戏详细截图介绍以及原型、Alpha、Beta对比

    原型设计 图片展示 功能与界面设计 1.登录注册 2.手机号验证 3.24点游戏 4.粉色系女生界面 Alpha 图片展示 功能与界面设计 1.24点游戏 2.背景音乐 3.可查看多种可能的答案 4. ...

  9. bzoj1215 24点游戏

    Description 为了培养小孩的计算能力,大人们经常给小孩玩这样的游戏:从1付扑克牌中任意抽出4张扑克,要小孩用“+”.“-”.“×”.“÷”和括号组成一个合法的表达式,并使表达式的值为24点. ...

随机推荐

  1. Swift Standard Library Reference.pdf

    Swift Standard Library Reference.pdf 下载地址 http://download.csdn.net/detail/swifttrain/7446331 自己的Mark ...

  2. 智课雅思词汇---二、词根acu和acr

    智课雅思词汇---二.词根acu和acr 一.总结 一句话总结:acu和acr:sharp锋利的,敏捷的: acuteacutelyacuity sharp锋利的,敏捷的 1.词根acr表示什么意思? ...

  3. 阿里云Redis使用规范

    一.键值设计 1.key名设计 (1)[建议]: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id ugc:video:1 (2)[建议]: 简洁性 ...

  4. Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份

    Linux下使用SSH.Crontab.Rsync三工具实现数据自动备份 作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份.重要数据库系统的备份工作.由于备份是个频繁而琐碎的工作,如何 ...

  5. BZOJ 高精度开根 JAVA代码

    晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得到一个无理数,所以这项工 ...

  6. css--两行显示省略号兼容火狐浏览器

    css--两行显示省略号兼容火狐浏览器 正常写法: .ellipse1{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;} . ...

  7. LuoguP3356 火星探险问题(费用流)

    题目描述 火星探险队的登陆舱将在火星表面着陆,登陆舱内有多部障碍物探测车.登陆舱着陆后,探测车将离开登陆舱向先期到达的传送器方向移动.探测车在移动中还必须采集岩石标本.每一块岩石标本由最先遇到它的探测 ...

  8. WPF中RichTextBox高度自适应问题解决方法

    最近做一个项目需要用到RichTextBox来显示字符串,但是不允许出现滚动条,在RichTextBox宽度给定的条件下,RichTextBox的高度必须正好显示内容,而不出现下拉滚动条. 这样就要计 ...

  9. 洛谷 P1459 三值的排序 Sorting a Three-Valued Sequence

    P1459 三值的排序 Sorting a Three-Valued Sequence 题目描述 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者 ...

  10. 洛谷 P2867 [USACO06NOV]大广场Big Square

    P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...