在不用for if while的情況下如何求極差?

時間 2021-06-03 01:18:43

1樓:暮無井見鈴

#include

using

namespace

std;

const

intn=6

;inta[

n]=;

intfun

();};

class

bad_derived

:public

bad_base;};

inti=0

;int

res_min=a

[0],res_max=a

[0];bad_base

base_var

;bad_derived

derived_var

;bad_base

*holder

=;ret_place

:int

select_min

=;intselect_max

=;res_min

=select_min[a

[i]<

res_min

];res_max

=select_max[a

[i]>

res_max

];++i;

trycatch

(...)

return

res_max

-res_min;}

intmain

()是時候展示扯淡了……

思路參考了 @D Flip Flop 。雖然不太可能消去分支,但避免了 UB 。

2樓:D Flip Flop

(警告,本答案毫無意義,這樣寫出來的程式又晦澀又低效)我們的目標是消滅分支

這個分支不僅僅是 C/C++ 層面上的 if while for 而是彙編的分支指令

(再次警告,正在學C語言的同學請點右上角的叉叉)#include

typedef

intelem_t

;typedef

void(*

fun_ptr

)(jmp_buf

,int

);void

not_jump

(jmp_buf

buf,

inti

)elem_t

fun()

為什麼要寫這麼繁瑣呢?

LLVM編譯結果(clang -O2 -S -emit-llvm); Function Attrs: nounwinddefine

i32@fun

()#1

完全沒有分支指令br ,全部依靠 select 完成。

( select true, %a, %b yields %a; select false, %a, %b yields %b )

但是到機器碼的時候失敗了,編譯到x86以後(clang -O2 -S)還是有了一條分支指令 orz

movl $not_jump, %eaxcmpl $99, %ecx

je .LBB1_2

# BB#1select.false

movl $longjmp, %eax.LBB1_2select.end

cmovgel %edx, %eax

cmpl %ecx, %edx

cmovlel %edx, %ecx

3樓:

這裡有一些畫風奇怪的玩法:

#include

#include

#include

using

namespace

std;

typedef

long

longll;

const

intn=10

;inta

=;intfunca

()int

funcb

()int

funcc

()switch(a

[i]<

ans_min)++

i;switch(i

ans_max

-ans_min;}

intmain()

4樓:Milo Yip

999999 有點 low,可在 i == 0 時調 func(a[0], a[0], 1)。

----

更新1: 具體是這樣:

intfunc

(int

min=0,

intmax=0

,inti=

0)----

更新2: 但這樣要增加乙個條件檢測,每次都要檢查一次,是不是比較慢啊。來個 lambda 吧,這樣也不用那些 default parameter 呢。

intfunc();

returnf(

a[0],

a[0],

1);}----

更新3: 如果可以把 n 和 a 改成 constexpr,我們就可以在編譯期得到結果,不需要考慮執行效能了:

constexpr

intn

=...;

constexpr

inta[n

]=...;

constexpr

intfunc

(int

min=0,

intmax=0

,inti=

0)沒有寫成 lambda 形式,是因為 constexpr lambda 在 C++17 才支援。

如果看待中南大學2020在成績沒出完的情況下就開始轉專業工作

什麼也不知道就不要瞎說,報名轉專業的時候雖然成績還沒有完全出來,但轉專業考試和面試確定名額的時候都是成績出來以後辦的事情了,都是按大一總成績來辦的,老師們加班加點兩天出成績還不滿意,你們還想怎麼樣?我舍友就有自信說自己就算成績沒全出來,也肯定有資格報名,現在她已經轉去了臨床。你們沒轉上專業,就不要說...

夫妻雙方在婚內買房,但房子在男方名下,這種情況女方該如何確保自己的權益?

于琦婚姻律師 這種情況女方不用保護自己的權益啊,因為法律本身就會保護你的權益了。夫妻雙方在婚內買房,即便只寫了男方乙個人的名字,房子仍然是夫妻共同財產。如果購房的資金不涉及父母的出資和男方婚前個人財產的轉化形式 比如賣了婚前的房子的錢,投入到婚後的房子中 那麼在離婚時,房子就是一人一半兒的。如果涉及...

乾眼症在不用藥的情況下如何緩解?

笙歌歇盡 樓主,你是經常面對電腦的吧?現在的季節,天氣乾燥是乙個原因,別說眼睛了,渾身由內而外都乾燥的很!如果樓主是個女生的話,如果平時化妝的話,眼乾就更在所難免了。這些含有化學成分的化妝品在被我們塗在眼睛上傷害有多大。它們有可能導致瞼板腺被堵住,從而不能正常的分泌液體,導致眼睛乾澀的狀況出現。但是...