C 動態捕獲整型數列

2021-08-07 10:11:22 字數 1241 閱讀 6703

假設有這樣乙個要求,輸入兩列數字,第一行是陣列中數字的個數,第二行數陣列中的數字,中間以空格隔開,我們可以寫出這樣的一段**:

int num;

cin>>num;

intarray[num];

for (int i = 0;icin>> array[i];

但是這段**是編譯不過了,因為(一般)陣列在定義時必須要指定長度,而num的值需要輸入的到,所以不能用num作為陣列的長度。

所以我們可以給陣列乙個足夠大的長度,然後只存入num位的資料,也就是陣列的長度是多少和num沒有關係,只要它能保證放得下:

int num;

cin>>num;

intarray[100];

for (int i = 0;icin>> array[i];

}

但是這有乙個問題,比如我們要完成的任務會有長度非常大的數列,但是也有長度很短的數列,這就造成了記憶體空間的浪費,那麼有沒有一種方式可以需要多少空間就開闢多少空間呢?

可以使用動態陣列的方法:

動態陣列是指在宣告時沒有確定陣列大小的陣列,所以就不會存在值得問題,而陣列的大小到底是多少是由num的值確定後,動態申請的記憶體空間,並返回其首位址。

int num;

cin>>num;

int *array = new

int[num];

for (int i = 0;icin>> array[i];

}

然後我們還可以改下要求:未知數列長度,此時輸入只有一行,就是要輸入的數列,數字之間用空格隔開。

這樣的話上面的方式就都用不了了,因為我們沒辦法用固定次數的迴圈控制何時輸入結束,這時需要捕獲回車鍵,因為cin在遇到空格和回車都是一次輸入結束,所以我們需要用到getchar,迴圈退出的條件就是:

if (getchar()=='\n')

break;

然後可以再用乙個足夠大的陣列儲存數值:

int

array[1000];

for (int i = 0;;i++)

這樣的話,又會造成空間浪費,於是可以把陣列換成vector:

vector

l;int num=0;

while(cin>>num)

C 波動數列(動態規劃)

觀察這個數列 1 3 0 2 1 1 2 這個數列中後一項總是比前一項增加2或者減少3,且每一項都為整數。棟棟對這種數列很好奇,他想知道長度為 n和為 s 而且後一項總是比前一項增加 a 或者減少 b的整數數列可能有多少種呢?輸入格式 共一行,包含四個整數 n,s,a,b,含義如前面所述。輸出格式 ...

C 整型位元組

表示整數 字元和布林值的算術型別合稱為整型 integraltype 整型int short和long都預設為帶符號型。要獲得無符號型別必須指定該型別為unsigned,比如unsigned long。unsignedint型別可以簡寫為unsigned,也就是說,unsigned後不加其他型別說明...

C 選擇整型

整型從小到大依次是 bool char signed char unsigned char short unsigned short int unsigned int long unsigned long以及c 11新增的long long unsigned long long c 11還新增了ch...