2021-2-2語法基礎一陣列
阿新 • • 發佈:2021-02-03
技術標籤:課堂筆記
改變迴圈執行過程的指令
- continue:跳過本次迴圈,直接執行下一次迴圈
- break:中斷本層迴圈
陣列
陣列的定義
int a[1000]; //資料型別 陣列名字[元素個數];
陣列的初始化
int a[13] = {0, 31, 28};
int b[] = {1, 2, 3}; //此時,陣列最多存放3個元素
陣列的訪問
通過下標訪問陣列,下標從0開始,到元素個數-1結束
int a[13]; //下標範圍0~12
a[0] = 0;
a[1] = 31;
a[i] = 28;
a[i + j] = 31;
a[i ++] = 30;
cout << a[i] << endl;
- 下標只能是自然數
- 使用下標不能越界
對陣列元素的遍歷
//使用陣列輸入n個數據
int n;
cin >> n;
//迴圈變數i同時表示陣列下標
for(int i = 1; i <= n; i ++)
cin >> a[i];
//從後向前通過下標來遍歷陣列
for(int i = n; i >= 1; i --)
{
cout << a[i] << ' ';
}
c5003 - 陣列下標的使用
int a[13] = {0, 31, 28, 31, 30...}; //使用下標作為月份,用陣列儲存對應的月份的天數
站立遊戲
演算法思想
-
使用陣列儲存每個的狀態(坐、站),用0表示站著,用1表示坐著。當陣列定義在main()外面時候,自動初始化為0
-
從2到k模擬所有操作
- 第2次, 遍歷陣列,將下標為2以及2的倍數的人,全部按相反的狀態進行操作,0變1,1變0,可以使用邏輯非,即
a[j] = !a[j];
- 第3次, 遍歷陣列,將下標為3以及3的倍數的人,全部按相反的狀態進行操作
- 第4次, 遍歷陣列,將下標為4以及4的倍數的人,全部按相反的狀態進行操作
- …
- 第k次, 遍歷陣列,將下標為k以及k的倍數的人,全部按相反的狀態進行操作
- 第2次, 遍歷陣列,將下標為2以及2的倍數的人,全部按相反的狀態進行操作,0變1,1變0,可以使用邏輯非,即
-
列舉每個人的編號,如果狀態為0,輸出編號
#include<iostream>
using namespace std;
//a[i]表示編號為i的人的狀態,0是站著,1是坐著
int a[10010];
int main()
{
int n, k; //n人數,k次數
cin >> n >> k;
//從第2次開始模擬遊戲操作
for(int i = 2; i <= k; i ++)
{
//遍歷每個人的編號j
for(int j = 1; j <= n; j ++)
{
//如果編號j是次數i的倍數,更新編號為j的狀態
if(j % i == 0) a[j] = !a[j];
}
}
//遍歷每個人的編號
for(int i = 1; i <= n; i ++)
{
//如果狀態為0,輸出編號
if(a[i] == 0) cout << i << ' ';
}
return 0;
}
c5004 - 投票統計
演算法思想
- 使用陣列儲存1~10號歌手的得票數,
int a[11];
- 迴圈n次
- 每次輸入一個投票的編號
x
,那麼x
號歌手的得票數增加1,即a[x] ++;
- 每次輸入一個投票的編號
- 遍歷1~n號歌手i
- 輸出i號歌手的得票數,即
a[i]
- 輸出i號歌手的得票數,即
#include <iostream>
using namespace std;
int a[11];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i ++)
{
int x;
cin >> x; //輸入投票的編號x
a[x] ++; //x號歌手的得票數增加1
}
//遍歷1~10號歌手,i為編號
for(int i = 1; i <= 10; i ++)
{
//輸出i號歌手的得票數
cout << a[i] << ' ';
}
return 0;
}
5005 - 計數排序(桶排序)
演算法思想
- 使用陣列來儲存每個數的出現次數,那麼
a[i] = 5
就表示i
出現了5次 - 迴圈n次
- 每次輸入一個待排序的數
x
,將a[x] ++
- 每次輸入一個待排序的數
- 遍歷每個桶0~1000,對於
i
號桶來說,a[i]
就表示i
出現的次數- 使用for迴圈將
i
輸出a[i]
次
- 使用for迴圈將
計數排序缺點
- 不能對小數或者是負數進行排序
- 如果範圍不確定的也不適用計數排序
#include <iostream>
using namespace std;
//a[i]表示的是i出現的次數
int a[1010];
int main()
{
int n;
cin >> n;
//輸入待排序的n個數
for(int i = 1; i <= n; i ++)
{
int x;
cin >> x; //x為待排序的數
a[x] ++; //x的出現次數增加1
}
//遍歷每個數i
for(int i = 0; i <= 1000; i ++)
{
//i出現次數就是a[i],所以迴圈a[i]次
for(int j = 1; j <= a[i]; j ++)
{
cout << i << ' ';
}
}
return 0;
}