閱讀本文前置知識
正文本文已搬運至作者個人部落格:
此部落格主要發布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...