#GOC115248. 下标计数知识点

下标计数知识点

题目描述

日常生活中,一个数字我们通常用来表示几,也会用来表示个数(次数)。数组中的数组下标是从0开始的有序整数,因此我们可以用数组下标来表示某个同学的学号,用数组元素来表示该学号出现过的次数:

for(int i=1;i<=n;i++)

{

cin>>m;

    a[m]=a[m]+1;   //统计学号m出现的次数

}

我们只要对数组从头至尾查找一次,如果某个数组元素大于“0”,就表示该元素对应的下标(学号)出现过。因为数组下标是从小到大,这样就避免了排序和去重的操作:

for(int i=1;i<=1000;i++)

   if (a[i]>0)cout<<i;

实际上如果只要判断一个数是否出现过,我们可以用0表示“没有出现”,用1来表示“有出现”,上面的程序段可以改写如下:

for(int i=1;i<=n;i++)

{

     cin>>m;

 a[m]=1;   //表示m出现过

}

for(int i=1;i<=1000;i++)

   if (a[i]>0)cout<<i;

因此,可以用以下程序解决明明的问题:

#include <iostream>

using namespace std;

int a[1001];

int main()

{

 int n,m;

 cin>>n;

 for (int i=1;i<=n;i++)

 {

  cin>>m;

  a[m]=1;            //元素值为1表示“有”

 }

 for (int i=1;i<=1000;i++)

  if (a[i]>0) cout<<i<<" "; //从1号到1000号搜索,元素值为1表示“有”,输出该号码

 return 0;

}