可以在程序執行過程中,對數組動態賦值。這時可用循環語句配合 scanf 函數逐個對數組元素賦值。

一維數組的應用及應用案例

案例描述

求解問題:100人圍坐一圈并按順時針方向依次編號為0,1,...,99。并沿順時針方向依次報數1,2,3,...k。報數為k的人退出。剩下的人繼續從1開始報數。最后留下的是幾號?k從鍵盤輸入。

輸入:3

輸出:90

案例分析】

求解問題的基本思路是:

1、用數組作刪除標記:int a[100]={0};

2、未作刪除標記的編號循環報號,報到k的編號i作刪除標記:a[i]=1;

3、每作一個刪除標記,人數減1。直到余下最后一人。

【參考代碼

main()

{ int i=0,h=0,n=100,k,a[100]={0};

  scanf("%d",&k);

  while(n>1) //人數n>1時,繼續報號

  {  if(a[i]==0) //編號i未作刪除標記

      {  h++; //報號

         if(h==k){h=0;a[i]=1;n--;} //報到k號,作刪除標記

      }

     i=(i+1)%100; //下一個編號

  }

  for(i=0;i<100;i++) //找出未作刪除標記的編號

  if(a[i]==0){printf("%d",i);break;}

}

一維數組的應用及應用案例

/*方法二思路:退出1個人后從其后的人開始重新編號0,1,...

則編號x的上一個編號為(x+k)%n(n為當前編號時的總人數+1)。

問題轉化為:最后余下的編號0的起始編號是多少?

參考代碼

main()

{ int i,k,s=0;

  scanf("%d",&k);

  for(i=1;i<100;i++)

       s=(s+k)%(i+1);

  printf("%d",s);

}*/