迴圈賽日程表 附陣列指標與二級指標關係詳解

2021-07-04 17:45:16 字數 1330 閱讀 6367

迴圈賽日程表,在這篇文章已經說的很詳細了

這裡多介紹乙個細節,並詳細解釋陣列指標

#include

#include

using

namespace

std;

void round_robin_calendar(int **a,int k,int n)

m*=2;

}}int main()

在這個程式裡,用到二級指標與陣列指標,之後二級指標又有二維陣列形式的應用,不容易理解。

1.先看這一句:

int **a=new

int *[n+1];

這個形式不常見,更簡單類似的例子有:

int *a=new

int[n+1];

這個大家都知道:

—–new int[n+1] 新申請一段可以儲存n+1個int型整數的記憶體空間

—–int* a 定義乙個int型指標

—–int *a=new int[n+1]就是讓int型指標指向申請的記憶體空間的首位址!

a是乙個陣列指標

(陣列指標:a pointer to an array,指向陣列的指標

區別於指標陣列:array of pointers,用於儲存指標的陣列,也就是陣列元素都是指標)

此時可以把a直接看作陣列

可以這樣用:a[5]=5;

(二級指標:任何值都有位址 ,一級指標的值雖然是位址,但這個位址做為乙個值亦需要空間來存放,是空間就具有位址 ,這就是存放位址這一值的空間所具有的位址,二級指標就是為了獲取這個位址)

2.而對於

int **a=new int *[n+1];

—–先定義二級指標 int **a;

—–然後分配n+1個int *型數的空間,

—–a指向這個空間的首位址,此時,分配的每個空間內存放的是int *型資料。

—–for(i=0;i<=n;i++)

a[i]=new int[n+1];

這裡的a[i]可以理解為int *a=new int裡面的a

所以把a當作二維陣列使用,就有a[i][j],這裡面存放的是int型數,即我們需要計算使用的數!

—–這裡有乙個優點:

此時在函式內使用時,不會因為傳值呼叫產生問題!

可以直接在函式外使用函式內已經處理過的二級指標a(或二維陣列)

比如在函式內賦值:a[1][2]=5;

在函外輸出指標內的數值:cout<

《演算法設計與分析》 迴圈賽日程表

1 概述 其實現在分治法用的地方非常的多,分而治之,遞迴解決可以幫助我們提公升解決問題的效率 2 例子 設有n 2的k次方個運動員要進行網球的迴圈賽,現在需要射擊乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能賽次 3 迴圈賽一共進行n 1天 3 解決方...

遞迴與分治策略 2 11迴圈賽日程表

設有n 2 k個運動員要進行網球迴圈賽,現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能賽一次 3 迴圈賽一共進行n 1天。按此要求在表中第i行和第j列處填入第i個選手在第j天所遇到的選手。按分治策略,將所有的選手分為兩半,n個選手的比賽日程表就...

C 陣列指標 指標陣列與二級指標

二級指標 測試 陣列指標是指標,意為指向陣列的指標 指標陣列是陣列,意為陣列內部儲存著指標的陣列。陣列指標具有如下特性1 陣列指標用於指向乙個陣列 陣列名是陣列首元素的起始位址,但不是陣列的起始位址,通過取位址符 作用域陣列名可以得到陣列的起始位址 可以通過陣列型別定義陣列指標如 arraytype...