學習筆記3 陣列

2021-09-05 09:50:43 字數 3031 閱讀 4798

最近學了陣列,陣列的概念是:陣列是相同型別的值得集合。陣列中的元素訪問形式:陣列[數字] 下標從0開始到n-1。要注意:下標一般都是從0開始的。有一維陣列二維陣列字元陣列。本章感覺讓我收穫最大的是sort排序與set和map容器。sort是好用的,但不熟悉所以在這次題裡只有乙個用了sort,還寫的很長,不過容易看懂,我是覺得sort最好用,預設的sort函式是按公升序排。sort(a,a+n); //兩個引數分別為待排序陣列的首位址和尾位址 但其它的幾個也要掌握(插入排序、氣泡排序、折半查詢)。還有從學姐那裡學到了乙個萬能標頭檔案,是include,它包含了所有標頭檔案,如果出現找不到標頭檔案的錯誤就把這個寫上,學著去看錯誤有專門總結coldeblock報錯。在乙個是字串,string表字串,

本次做題過程中出現了各種錯誤,比如runtime error,這個錯誤出現的原因有以下幾個:runtime error (執行時錯誤)就是程式執行到一半,程式就崩潰了。比如說:1、除以零2、陣列越界:int a[3]; a[10000000]=10;3、指標越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;4、使用已經釋放的空間:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;5、陣列開得太大,超出了棧的範圍,造成棧溢位。我做題犯的錯大多就是陣列越界或是陣列開的太大。真的要注意

下標越界是大忌!

編譯程式不檢查是否越界

下標越界,將訪問陣列以外的空間

那裡的資料是未知的,不受我們掌控,可能帶來嚴重後果。

以下是例子:

1、有趣的跳躍

乙個長度為n(n>0)的序列中存在「有趣的跳躍」當前僅當相鄰元素的差的絕對值經過排序後正好是從1到(n-1)。例如,1 4 2 3存在「有趣的跳躍」,因為差的絕對值分別為3,2,1。當然,任何只包含單個元素的序列一定存在「有趣的跳躍」。你需要寫乙個程式判定給定序列是否存在「有趣的跳躍」。

輸入一行,第乙個數是n(0 < n < 3000),為序列長度,接下來有n個整數,依次為序列中各元素,各元素的絕對值均不超過1,000,000,000。

正解:#include

#include

using namespace std;

int main()

int i,n,s,a[3010],b[3010],q;

cin>>n;

for(i=0;i>a[i];

for(i=0;is=0;

for(i=0;iif(i==0&&(b[i]==0||b[i]>=n))

s+=1;

break;

for(q=i+1;qif(b[i]==b[q]||b[q]==0||b[q]>=n)

s+=1;

break;

if(s==0)cout<<"jolly";

else cout<<"not jolly";

return 0;

錯誤原因:a與b陣列的範圍開的太大

2、字串hash(這個是自己的重點!!!)

給定n個單詞(每個單詞長度不超過100,單詞字串內僅包含小寫字母)。

請求出n個單詞中共有多少個不同的單詞。

輸入第1行包含1個正整數n。

接下來n行每行包含乙個字串。

輸出乙個整數,代表不同單詞的個數

錯解:#include

#include

#include

using namespace std;

int main()

int i,n,j,s;

cin>>n;

string a[11110],b[11110];

for(i=0;icin>>a[i];

for(i=0;ib[i]=a[i];

s=n;

for(i=0;ifor(j=i+1;jif(b[i]==a[j])

s=s-1;

break;

cout(這個做法本身不對,和陣列開大開小沒關係,但我也不明白為啥不對,只知道這種題用set或map做幾行就能解決,出這道題的目的應該是想讓我們知道有map容器和set)

正解:#include

#include

#include

using namespace std;

setb;

int main(void)

int n;

string a;

cin>>n;

for(int i=0;icin>>a;

b.insert(a);

cout《以下是從於同學那裡學到的知識:

set與map是vector(容器)的兩種,set好用是因為set中沒有重複的元素(若有相同元素被放到set中的話它會覆蓋原來的相同值以保證容器中一樣的元素只有乙個)且各個元素有序排列,只需將元素插入到set中即可(小到大)set使用要:

#include b 宣告集合b

b.insert(a)向集合b中插入a

注意標頭檔案中要有#include

第二個錯是:time limit exceeded說明這個程式的執行時間超過了這個限度。原因有:1、沒有迴圈終止條件。(for迴圈裡面的條件》與《寫混了)2、函式呼叫超時。(這個不懂,總之換種做法做吧)3、3.程式演算法不夠優化。(老師講過這樣的,一定要將程式演算法能優化則優化,不然在時間限制內執行不完程式還是過不了!!!)

第三個錯是常見的wrong answer

還是要考慮問題的多種可能,一種也不能漏。

第四個錯是output limit exceed,output limit exceed是超過輸出限制(ole)錯誤,提示程式產生了過多的輸出資訊,一般是由於死迴圈造成的。再簡單點說是程式輸出了過多的東西,甚至超出了評判系統為了自我保護而設定的被評判程式輸出大小的最高上限。這個是在做做遊戲時出的錯。就是控制迴圈的i忘記在一次迴圈後令i++。

第五個錯是presentation error

presentation error 意為輸出格式錯誤,也就是你的輸出沒有按照輸出要求進行格式化。一般是多了或者少了一些空格或者空行。輸出時要注意空格。

以上的錯誤都是這次這次做陣列題時出現的,說明陣列掌握的不好還是要多加練習。

swift學習筆記3 陣列 字典

1.陣列用來儲存和管理同一型別的資料。下面通過 學習swift中陣列的建立 修改 新增 刪除 排序 訪問 陣列的建立 格式 type array var number int var string array var double 3.0,4,5 陣列的編輯 number.1 number.inse...

c primer學習筆記3 陣列和指標

現代c 程式應盡量使用vector和迭代器型別,而避免使用低階別的陣列和指標。設計良好的程式只有在強調速度時才在類實現的內部使用陣列和指標。1 字串字面值以空字元結尾 2 陣列下標的正確型別是size t 1 指標與引用 a.引用必須初始化,而指標不必,故指標使用時必須檢查是否為空 b.引用一旦初始...

學習筆記3

第四單元 了解linux檔案系統 1.絕對路徑和相對路徑 a.絕對路徑 無論在系統的任何位置,從系統的頂級目錄 根目錄 一級一級往下排的表示方法 b.相對路徑 如果已經在某乙個目錄下面操作,那麼可以省略從根目錄到當前目錄的表示,若要切到該目錄下的任意位置,直接表示 2.系統中根目錄下子目錄的作用 a...