题目

类型 :模拟

ac代码

using namespace std;

int a[1100];
 int  search( int a[], int m, int t)  // 查找这个数字是否在内存里
{
    for( int i=1; i<=m; i++ )
    {
        if(a[i]== t)
                return 1;
    }
    return 0;
}

void change( int a[],int m,int t)   // 内存满了之后查去旧数字进新数字
{
    a[1]=0;
    for( int i=1; i<=m; i++)
    {
        a[i]= a[i+1];
    }
    a[m]= t;
}

int main()
{
    for(int j=0; j<=1000; j++ )
    {
        a[j]= -1;
    }
    int m, n;
    cin >> m >> n;
    int cnt=0;
    for( int i=1; i<=n; i++ )
    {
        int t;
        cin >> t;
        if(search(a, m, t)) {
            continue;
        }
        else {
            if( cnt<m )
            {
                a[cnt+1]=t;
                cnt++;
            }
            else {
                change(a, m, t);
                cnt++;
            }
        }
        }
    cout << cnt;
    return 0;
}

主要问题:

一开始没注意到非负整数包含零 二是对一开始对内存的写入不清晰

a[cnt+1]=t; 写成了 a[i] = t;