1. 程式人生 > >演算法競賽入門經典(第二版)第三章陣列和字串例題與提示上

演算法競賽入門經典(第二版)第三章陣列和字串例題與提示上

3.1陣列

  • 程式3-1 逆序輸出
#include<stdio.h>
#define max 105
int a[max];
int main()
{
    int x,n=0;
    while(scanf("%d",&x)==1)
    {
        a[n++]=x;
    }
    for(int i=n-1;i>=1;i--)
        printf("%d",a[i]);
        printf("%d\n",a[0]);//分兩條語句輸出
        return 0;
}
  1. 語句int a[max]聲明瞭一個包含maxn個整型變數得陣列,即a[0],a[1],…,a[max-1],但不包含a[max],但不包含a[max]。max必須是常數不能是變數
  2. 在演算法競賽中,常常難以精確計算出需要得陣列大小,陣列一般會宣告得稍大一些。在空間夠用得情況下浪費一點不會有太大得影響
  3. 比較大得陣列應儘量宣告在main函式外,否則程式可能無法執行
  4. 陣列不能夠進行賦值操作,如果需要把陣列a全部複製到陣列b中可以用memcpy(b,a,sizeof(a))函式(標頭檔案string.h)
  • 程式3-2 開燈問題
#include<stdio.h>
#define max 1010
#include<string.h>
int a[max];
int main()
{
    int n,k,first=
1; memset(a,0,sizeof(a));//把資料a清零 scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { for(int j=1;j<n;j++) { if(j%i==0) a[j]!=a[j]; } } for(int i=1;i<=n;i++) if(a[i]) {if(first)first=0;else printf(" ");printf("%d",i);}//為了避免輸出多餘空格設定了一個標誌變數first
printf("\n"); }