首页 > 编程语言 >24点 Pascal大暴力程序

24点 Pascal大暴力程序

时间:2024-07-20 23:29:14浏览次数:7  
标签:24 do begin end 暴力 q1 top2 top1 Pascal

24点大暴力程序:

Pascal Code:

const
  dic:array[1..4]of char=('+','-','*','/');
var
  gd:array['!'..'a']of longint;
  q1:array[0..105]of extended;
  q2:array[0..105]of char;
  a:array[1..4]of longint;
  i,j,k,ll,p,q,m,n,x,y,z,l,o,y1,y2,z1,z2,l1,l2,u,ans,qk,top1,top2:longint;
  s,s1,s2,s3,s4:string;
  flag,flagall,broke:boolean;
procedure kill;
begin
  if (q2[top2]='/') and (q1[top1]=0) then
  begin
    broke:=true;
    exit;
  end;
  case q2[top2] of
    '+':q1[top1-1]:=q1[top1-1]+q1[top1];
    '-':q1[top1-1]:=q1[top1-1]-q1[top1];
    '*':q1[top1-1]:=q1[top1-1]*q1[top1];
    '/':q1[top1-1]:=q1[top1-1]/q1[top1];
  end;
  dec(top1);
end;
procedure get;
var
  n,i,sz:longint;
begin
  n:=length(s);
  top1:=0;
  top2:=0;
  sz:=0;
  i:=1;
  broke:=false;
  while i<=n do
  begin
    if s[i] in['0'..'9'] then
    begin
      sz:=0;
      while (i<=n) and (s[i] in['0'..'9']) do
      begin
        sz:=sz*10+ord(s[i])-48;
        inc(i);
      end;
      inc(top1);
      q1[top1]:=sz;
    end else
    if s[i]='(' then
    begin
      inc(top2);
      q2[top2]:='(';
      inc(i);
    end else
    if s[i]=')' then
    begin
      while (top2>0) and (q2[top2]<>'(') do
      begin
        kill;
        dec(top2);
      end;
      dec(top2);
      inc(i);
    end else
    begin
      while (top2>0) and (gd[q2[top2]]>=gd[s[i]]) do
      begin
        kill;
        dec(top2);
      end;
      inc(top2);
      q2[top2]:=s[i];
      inc(i);
    end;
    if broke then
      exit;
  end;
  if (23.99999<q1[1]) and (q1[1]<24.00001) then
  begin
    delete(s,1,1);
    delete(s,length(s),1);
    flagall:=true;
    writeln(s,'=',24);
  end;
end;
begin
  gd['+']:=1;
  gd['-']:=1;
  gd['*']:=2;
  gd['/']:=2;
  while true do
  begin
    writeln('Input:');
    readln(a[1],a[2],a[3],a[4]);
    writeln('Output:');
    flagall:=false;
    for i:=1 to 4 do
      for j:=1 to 4 do
        if i<>j then
          for k:=1 to 4 do
            if (i<>k) and (j<>k) then
              for ll:=1 to 4 do
                if (i<>ll) and (j<>ll) and (k<>ll) and not flagall then
                begin
                  p:=a[i];
                  q:=a[j];
                  m:=a[k];
                  n:=a[ll];
                  str(p,s1);
                  str(q,s2);
                  str(m,s3);
                  str(n,s4);
                  s:='';
                  qk:=0;
                  for x:=0 to 1 do
                    for y:=1 to 4 do
                      for y1:=0 to 1 do
                        for y2:=0 to 1 do
                          for z:=1 to 4 do
                            for z1:=0 to 1 do
                              for z2:=0 to 1 do
                                for l:=1 to 4 do
                                  for l1:=0 to 1 do
                                    for l2:=0 to 1 do
                                      for o:=0 to 1 do
                                      if not flagall then
                                      begin
                                        s:='';
                                        if x=1 then
                                          s:=s+'(';
                                        s:=s+s1;
                                        if y1=1 then
                                          s:=s+')';
                                        s:=s+dic[y];
                                        if y2=1 then
                                          s:=s+'(';
                                        s:=s+s2;
                                        if z1=1 then
                                          s:=s+')';
                                        s:=s+dic[z];
                                        if z2=1 then
                                          s:=s+'(';
                                        s:=s+s3;
                                        if l1=1 then
                                          s:=s+')';
                                        s:=s+dic[l];
                                        if l2=1 then
                                          s:=s+'(';
                                        s:=s+s4;
                                        if o=1 then
                                          s:=s+')';
                                        qk:=0;
                                        for u:=1 to length(s) do
                                        begin
                                          if ((s[u]='+') or (s[u]='-') or (s[u]='*') or (s[u]='/')) and (s[u-1]='(') then
                                          begin
                                            qk:=-1;
                                            break;
                                          end;
                                          if s[u]='(' then
                                            inc(qk);
                                          if s[u]=')' then
                                            if qk=0 then
                                            begin
                                              qk:=-1;
                                              break;
                                            end else
                                              dec(qk);
                                        end;
                                        if qk<>0 then
                                          continue;
                                        s:='('+s+')';
                                        get;
                                      end;
                end;
    if not flagall then
      writeln('No Answer!');
  end;
end.


标签:24,do,begin,end,暴力,q1,top2,top1,Pascal
From: https://www.cnblogs.com/GK0328/p/18313950

相关文章

  • NOI2024 总结
    赛时经历Day1想了1h的t1,然后思路不是很清晰,写了1h。想t2,顺着擂台赛想下去,可以分成\(k\)个一组,每组\(\dfrac{k(k-1)}2\)次查询,然后选出一个最大的组成一个新的序列。过了一会儿,想到dp这个过程,得到82pts。剩下大约1h30min,想t3,一直在往计数+容斥的方向......
  • 字符的统计 387、389、383、242、49
    387.字符串中的第一个唯一字符解法一、哈希映射计算每个字符出现的次数,然后再遍历,与数组里记录次数进行比对顺便一提哈希表数据结构耗时很大,数组计数哈希思想快很多(是不是桶排来着classSolution{publicstaticintfirstUniqChar(Strings){intlen=......
  • 2024 暑假友谊赛 2
    2024暑假友谊赛2A-......
  • NOI2024游记
    终于还是到了这一天。NOI,无论金牌与否,都会是我OI生涯中最后一场正式比赛了——哪怕进入了集训队也是这样。那么,走完最后这一程吧。Day-6(7.11)结束学考,抵达重庆,最后四天集训。Day-5(7.12)模拟赛挂分,原因是不会贪心。感觉真是越学越菜了。晚上和Clonoth,A_zjzj,275307894......
  • NOI 2024 游记
    https://www.cnblogs.com/fjy666/p/-/NOI2024NOI2024游记。建议你立刻关掉这个页面捏。7/16(Day-1)到达育才中学。上一次来育才是什么时候呢?WC2024(Cu)。在育才没有什么比较好的回忆。去领身份牌未果,再去的时候看到了zxx。7/17(Day0)上午开幕式,开场满屏NOI有文......
  • DASCTF 2024暑期挑战赛------1z_RSA
    题目:fromCrypto.Util.numberimport*fromsympyimport*importosfromsecretsimportflagnbit=130e=3l=getPrime(505)m=bytes_to_long(flag+os.urandom(64))assertlen(flag)==29whileTrue:p,q=getPrime(nbit),getPrime(nbit)PQ=......
  • 2024.7.20 模拟赛总结
    T1lcdStatement:给定\(n(1\len\le10^8)\),问有多少对\((i,j)(1\lei,j\len)\)满足\(\frac{xy}{\gcd(x,y)^2}\le3\)。Solution:简单题。令\(x'=\frac{x}{\gcd(x,y)},y'=\frac{y}{\gcd(x,y)}\),枚举\((x',y')\)并计算即可......
  • 20240720周赛订正
    20240720周赛订正总结本场比赛没有任何少拿的分。题解T1尺取。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;//#defineintlonglong#definelcu<<1#definercu<<1|1#definefifirst#definesesecondconstintN=10......
  • 【2024最新版】Vue前端面试篇,看这一篇就够了
    文章目录Vue常用的指令都有哪些v-bind和v-model的区别Vue2的生命周期有哪些Vue3的生命周期有哪些vue3中创建响应式变量的方法ref和reactive原理vuex有哪些方法vue-router生命周期钩子vue框架和原生JavaScript有什么区别对于提升项目加载速度和运行效率是怎么做的webpack......
  • 2024 暑假友谊赛 2
    A题目链接思路:枚举每个十字中心点,合法就标记,最后若还剩下点没被标记就NO#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definePIIpair<int,int>constintN=1e6+5,mod=998244353,Mod=1e9+7;intdx[4]={-1,0,1,0};intdy[4......