C 多返回值函式的一種實現

2021-10-13 03:16:44 字數 2789 閱讀 2510

閱讀本文前置知識

正文本文已搬運至作者個人部落格:

此部落格主要發布ctf及midi**製作相關博文

筆者寫作業的時候遇到了該需求,題目原題如下

2023年前數學大師畢達哥拉斯就發現,正整數數對220和284之間存在著奇妙的聯絡: 220的因數之和(除了自身之外的因數)為1+2+4+5+10+11+20+22+44+55+110=284,而284的因數之和則為1+2+4+71+142=220。畢達哥拉斯把這樣的數對稱為相親數(注意:構成相親數的兩個數不等。乙個為雄數,另乙個稱為雌數)。程式設計求m和n(m、n為大於1並且在unsigned表示範圍內)之間的所有相親數。m、n由使用者從鍵盤上輸入

定義乙個判斷函式charge(),對bottom同時還需要返回比較過程中得到的因數(以陣列形式"打包返回")

此外,為了避免重複輸出(比較220時輸出了220和284一組相親數;而當程式執行至比較284時,則不應當進行比較,而應當直接i++,進入下一迴圈),我們還需要乙個記憶化快取用於判斷資料合法性

也就是說,charge()的返回值總共有四個:bool,包含a所有因數的陣列,包含b所有因數的陣列,用於防止重複比較的記憶化快取

(a,b為一對相親數)

(以下**基於c14標準,c11和c98編譯不通過)

#include

#include

#include

using

namespace std;

bool

charge

(int a,vector<

int>

* b,vector<

int>

* c,vector<

int>

* d)

;int

main()

cout

-1]<<

"="<<

accumulate

(firstvector.

begin()

,firstvector.

end(),

1)

accumulate

(firstvector.

begin()

,firstvector.

end(),

1)<<

":"<<

1<<

"+";

for(

unsigned

int j =

0;j< secondvector.

size()

-1;j++

) cout

-1]<<

"="

clear()

;//每次提取因數結束後需要清空因數儲存容器

secondvector.

clear()

;//每次提取因數結束後需要清空因數儲存容器

serialnumber++;}

firstvector.

clear()

;//每次提取因數結束後需要清空因數儲存容器

secondvector.

clear()

;//每次提取因數結束後需要清空因數儲存容器

}return0;

}bool

charge

(int a,vector<

int>

* b,vector<

int>

* c,vector<

int>

* d)

}int firstsum =

accumulate((

*c).

begin()

,(*c).

end(),

1);//計算求和

for(

int i =

2; iint secondsum =

accumulate((

*d).

begin()

,(*d).

end(),

1);if

(secondsum==a)

return

false

;}

我們如果想要使函式執行過程中產生的變數,可以在函式外被呼叫,有兩個方法

在預編譯標頭檔案之後立刻定義乙個頂級變數,這樣的話所有函式當中都可以使用這個變數,如果這個變數是指標型變數,那麼跳出某個函式作用域之後,其值依舊會保留,如果對上述文字不理解,請看這篇文章

在父函式當中定義乙個指標,向子函式傳參的時候傳入該指標,利用該指針對記憶體直接進行修改,跳出子函式之後,父函式當中也可呼叫該指標,而且該指標並沒有定義在頂級,因此不會對其他函式造成影響(可能其他函式也想使用該變數名,且用途完全不同)

每次迴圈輸出乙個因數乙個符號(=+,最後乙個因數輸出的是=,其他因數是+),如果每次迴圈時都判斷一次是否為最後乙個因數,當且僅當輸出最後乙個因數時才會有效,更高效的做法是,每次迴圈都輸出因數+,跳出迴圈後輸出"\b"(用於刪除輸出流當中的上乙個字元)和=(本條內容對應**已刪除)

其他要點都在**注釋中,請仔細審計

函式 函式的多返回值

go noinline func test x int int,int func main go build go tool objdump s main main test函式提供多返回值。多返回值在語法上接近於 python,在實現上方式上不一樣。python 多返回值實際上打包成乙個元組返回,...

Shell中函式的返回值的一種呼叫

bin sh sum sum 1 2 c sum 1 2 echo echo c 執行命令 bashtest 11 1 執行結果是 12 sum 1 2的結果 10 echo 的結果,因為return的值為10 12 echo c的結果,值為12,所以c並不會被附上return的值,echo c時呼...

C 函式返回值。

一 params.可變引數,無論有幾個引數,必須出現在引數列表的最後,可以為可變引數直接傳遞乙個對應型別的陣列。class program test msg intarry static void test string msg,params int args 二 ref 引用傳遞 三 out ou...