关闭

娱乐向——a+b 的数种写法

335人阅读 评论(0) 收藏 举报

1.正常写法

var
  a,b:longint;
begin
  readln(a,b);
  writeln(a+b);
end.

2.随机数

就是强行把结果算出来以后看人品。。。

var
  a,b,c:longint;
begin
  randomize;
  readln(a,b);
  while true do
  begin
    c:=random(100000000);
    if c=a+b
      then
        begin
          writeln(c);
          halt; 
        end;
  end;
end.

3.深搜

吧a和b当成两个节点一共有三个,从第一个开始往下搜,搜到不能搜为止

var
  f,l:array[1..10] of longint;
  i,j,k,n,m,a,b,ans:longint;
procedure dfs(dep:longint);
var
  i,j,k:longint;
begin
  if dep=3 then exit;
  for i:=1 to 3 do
    if (l[dep]=0) then
    begin
      ans:=ans+f[dep];
      l[dep]:=1;
      dfs(dep+1);
    end;
end;
begin
  readln(f[1],f[2]);
  dfs(1);
  writeln(ans);
end.

4.spfa

三个点,没两个点之间的边权位a和b,求出从1到3的最短路

type
  arr=record
        x,y,w,next:longint;
      end;
var
  edge:array[0..10000] of arr;
  ls,t,state:array[0..100000] of int64;
  exits:array[0..10000] of boolean;
  i,j,k,n,m,q,p,o,s,l,a,b:longint;
procedure spfa;
var
  head,tail,i,j:longint;
begin
  state[1]:=0;
  head:=0; tail:=1;
  exits[1]:=true;
  t[1]:=1;
  repeat
    inc(head);
    i:=ls[t[head]];
    while i<>0 do
      begin
        with edge[i] do
          begin
            if state[x]+w<state[y] then
              begin
                state[y]:=state[x]+w;
                if exits[y]=false then
                  begin
                    inc(tail);
                    t[tail]:=y;
                    exits[y]:=true;
                  end;
              end;
            i:=next;
          end;
      end;
      exits[t[head]]:=false;
    until head=tail;
end;
begin

  fillchar(state,sizeof(state),63);
  readln(a,b);
  n:=2; m:=3;
  edge[1].x:=1; edge[1].y:=2; edge[1].w:=a; edge[1].next:=0;
  edge[2].x:=2; edge[2].y:=3; edge[2].w:=b; edge[1].next:=0;
  ls[1]:=1; ls[2]:=2;
  spfa;
  writeln(state[3])
end.
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62975次
    • 积分:4242
    • 等级:
    • 排名:第7185名
    • 原创:318篇
    • 转载:1篇
    • 译文:0篇
    • 评论:67条