1. 程式人生 > 其它 >2021-2-2語法基礎一陣列

2021-2-2語法基礎一陣列

技術標籤:課堂筆記

改變迴圈執行過程的指令

  • 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的倍數的人,全部按相反的狀態進行操作
  • 列舉每個人的編號,如果狀態為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]
#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]

計數排序缺點

  • 不能對小數或者是負數進行排序
  • 如果範圍不確定的也不適用計數排序
#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;  
}