#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;
}