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