1. 程式人生 > >山東科技大學OJSearch Problem (V)

山東科技大學OJSearch Problem (V)

Description

查詢(Search)也翻譯成搜尋,是電腦科學中的一個很大的子類,也是一種計算機的最常見應用。其核心是利用現代電子計算機的儲存能力將資料收集起來,然後用某種查詢(搜尋)演算法在有效的時間內,把需要的資料找出來。

查詢(搜尋)演算法是利用計算機的高效能來有目的的窮舉一個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。查詢(搜尋)演算法按照操作次序可以分成三大類:順序查詢(深度優先、廣度優先)、二分查詢、直接計算儲存位置(如Hash表)。針對應用的效能要求和問題規模,選擇不同的查詢(搜尋)演算法。

在解決查詢(搜尋)的問題時,首先考慮資料組織與結構的問題,即在程式中用何種形式儲存資料的。一般根據資料集中資料元素間的相互關係:一對一、一對多、多對多,分別組織成:有序表(也叫線性表)、樹、圖。這就是構造資料抽象的過程。

利用資料元素間儲存位置的順序關係來組織的結構一般稱作陣列(Array)、也做列表(list)或向量(Vector),所有的高階程式設計語言都會支援這種儲存結構。計算機的記憶體儲器就是按照這種方式來組織的,因此這也是計算機中最基本的儲存結構。

陣列是這樣一種描述一對一關係的資料組織結構:任何一個數據元素都有一個固定的儲存位置,每個位置前、後各僅有一個相鄰的儲存位置。陣列中元素的儲存位置之間滿足一對一的線性序關係,因此可以用自然數來描述每個儲存位置上的資料元素,這些自然數就是陣列元素的唯一標識——下標。

陣列的儲存組織結構決定了一個事實:易於存取資料元素、難於改變儲存結構。存取陣列中資料元素的操作代價可以不計,修改陣列中資料元素的代價非常大。因此,陣列適用於一次性把資料儲存好,不改變或者很少改變資料元素間相互關係的應用中,不適用於那些需要邊使用資料邊修改結構的問題。

利用陣列解決資料查詢(搜尋)問題的基本步驟是:把資料儲存到陣列中,按合理的操作次序把想要的資料找出來。關鍵點是:合理利用下標和資料元素之間的對應關係,解決應該儲存什麼、以什麼順序儲存的問題。

你要解決的問題是:在給定的一個整數序列中,按照要求解決一個查詢(搜尋)問題。

Input

輸入分為兩部分:第一部分是第一行,有N+1個整數,第一個正整數為N(N<=10000),表示後跟一個有N個元素的整數序列。

第二部分從第二行開始直到EOF結束,每行為一個整數K。

Output

輸出為多行,與輸入的第2部分順序對應,每行輸出為:找到整數序列中所有值為k的整數並按從小到大輸出它們的下標(範圍是1~N),若找不到則輸出“NOT FOUND”。

Sample Input

10 1 2 3 2 3 4 3 3 5 0 1 2 3 5 10 100 Sample Output

1 2 4 3 5 7 8 9 NOT FOUND NOT FOUND

#include <stdio.h>
int main()
{
    int N,k,j,a[10001],max=0,flag=0;
    scanf("%d",&N);
    for(j=0;j<N;j++)
    {
        scanf("%d",&a[j]);
    }
    while(scanf("%d",&k) != EOF)
    {
        max=0;flag=0;
        for(j=0;j<N;j++)
          {
              if(a[j]==k)
                {
                    max++;
                    if(flag==0)
                    {
                        printf("%d",j+1);
                        flag=1;
                    }
                    else
                        printf(" %d",j+1);
                }


          }
          if(flag!=0)
            printf("\n");
          if(max==0)
        printf("NOT FOUND\n");



    }
     return 0;
   }