1. 概念
數(shù)組這個概念并不陌生,然而,數(shù)組本身也是一種數(shù)據(jù)結(jié)構(gòu)。
數(shù)組在存儲數(shù)據(jù)時是按順序存儲的,存儲數(shù)據(jù)的內(nèi)存也是連續(xù)的,所以他的特點就是尋址讀取數(shù)據(jù)比較容易,插入和刪除比較困難。簡單解釋一下為什么,在讀取數(shù)據(jù)時,只需要告訴數(shù)組要從哪個位置(索引)取數(shù)據(jù)就可以了,數(shù)組會直接把你想要的位置的數(shù)據(jù)取出來給你。插入和刪除比較困難是因為這些存儲數(shù)據(jù)的內(nèi)存是連續(xù)的,要插入和刪除就需要變更整個數(shù)組中的數(shù)據(jù)的位置。
所以數(shù)組對比鏈表,數(shù)組讀取和使用更加靈活,而鏈表插入和刪除更加便捷。
2. 回到數(shù)組
相比在學習各種計算機編程語言基礎(chǔ)的時候基本都會了解數(shù)組的概念,熟悉數(shù)組的使用很重要,在學習數(shù)據(jù)結(jié)構(gòu)之后尤其是學習到了向量,線性表,鏈表等概念之后,會更加趨向于使用這類高級數(shù)據(jù)結(jié)構(gòu)。但在實際中,編程應該講究靈活貫通,鏈表等雖然操作方便,但是其由于指針以及其他結(jié)構(gòu)的設(shè)計問題本身占用空間就比較大,因此,靈活掌握合適的數(shù)據(jù)結(jié)構(gòu)的使用是必須的。
3.模擬
既然了解了數(shù)組的優(yōu)點,為什么不加以善用呢?這里介紹一個編程的思維——模擬,所謂模擬,就是通過簡單易懂的方式,根據(jù)所給出的要求,一一進行實現(xiàn),通過代碼模擬出所需要實現(xiàn)的方法過程,模擬的方法不是一種具體的實現(xiàn)算法,而是一種思維。
如分糖果題目
我們通過模擬的思路,通過創(chuàng)建一個數(shù)組,每一個數(shù)組元素代表有一個小朋友,利用while循環(huán)的判斷來篩選出跳出條件的方式來完成,參考代碼如下:
#include<iostream> using namespace std; const int MAX=101; int kid[MAX],ans=0; int main() { int n; cin>>n; for(int i=0; i<n; i++) { cin>>kid[i]; } while(1) { //用于判斷是否全體相等,如果全體相等則退出循環(huán),期待有更好的方式解決 bool flag=true; for(int i=1; i<n; i++) { if(kid[0]!=kid[i]) flag=false; } if(flag) break; //全體減半(由于是全體偶數(shù),所以不需要考慮進位問題) for(int i=0; i<n; i++) { kid[i]=kid[i]/2; } //利用一個臨時變量來將全體數(shù)組加上前面一位的數(shù) int temp=kid[n-1]; for(int i=n-1; i>0; i--) { kid[i]+=kid[i-1]; } kid[0]+=temp; //判斷是否是偶數(shù),不是則+1,同時計數(shù)器也+1 for(int i=0; i<n; i++) { if(kid[i]%2!=0) { kid[i]++; ans++; } } } cout<<ans<<endl; return 0; }
諸如此類,還有很多類似的題目,多多進行研究對代碼書些很有幫助。
4 .小試牛刀
請試著使用模擬的思路去寫如下練習題目,這對你的學習有很大幫助。
【以上題目均為藍橋杯真題,沒有一定的基礎(chǔ)可能會有些許吃力,請多多練習并參照題解思考】
PS:Dotcpp網(wǎng)站中標簽欄直接打開“模擬”可以看見更多的相關(guān)題目。
1431 | 藍橋杯2014年第五屆真題-分糖果 |
1454 | 藍橋杯歷屆試題-螞蟻感冒 |
1560 | 藍橋杯算法提高VIP-計算器 |
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程