数组下标的应用——①蒜头君的数字游戏I

蒜头君有很多张写着数字的卡片,每张卡片上有一个1-10之间的整数,现在需要我们统计每张卡片多少张。

思路:
1)定义一个长度为11的数组存储卡片的信息;
数组的下标——>表示卡片上的数字;
数组元素——>表示卡片出现的次数;

int cnt[11];//定义全局变量的好处:将数组元素全部初始化为0

2)每读入一个数,就将对应的数组元素的值加一;

cin>>temp;
cnt[temp]++;

此时,cnt[1]中存储的是数字1出现的次数,cnt[2]中存储的数字2出现的次数;

完整的代码

#include <iostream>
using namespace std;
int cnt[11];
int main() {
    int n;
    cin >> n;//一共n张卡片
    for (int i = 0; i < n; i++) {
        int temp; //卡片上的数字temp
        cin >> temp;
        cnt[temp]++;//temp卡片的个数   
    }
    for(int i=1;i<=10;i++){
            cout<<i<<" "<<cnt[i]<<endl;//循环遍历输出
    }
    return 0;
}

运行
程序的运行结果
扩展 1
在原题基础上,统计出现次数最多的卡片的次数,以及卡片数。
思路
1)定义一个变量max存储最大出现次数,并将其初始化为-1;
定义一个变量index存储卡片的值;

int max=-1,index;

2)一个数的出现次数大于等于max,我们就更新max和index的值,这样就保证max中始终存储最大出现次数,index中始终存储出现次数的数中的最大值;

if(max<=cnt[i]){
	max=cnt[i];//更新max的值
	index=i;//i=temp=index
}

完整代码

#include <iostream>
using namespace std;
int cnt[11];
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int temp;
        cin >> temp;
        cnt[temp]++;
    }
    int max=-1,index;//max存储最大出现次数,index存储众数
    for(int i=1;i<=10;i++){
        if(max<=cnt[i]){
            max=cnt[i];
            index=i;
        }
    }
    cout<<max<<" "<<index;
    return 0;
}

扩展 2
蒜头君还拥有很多张写着大写字母的卡片,每张卡片上有一个A~Z之间的字母,俗话说物以稀为贵,现在我们想找出出现次数最少的字母,如果这样的字母有多个,我们只需要ASCII码最小的一个。
思路
1)相邻的大写字母的ASCII码相差1,一共26个英文字母;
定义一个长度为26的数组存储每个字母的出现次数;

int cnt[26];

cnt[0]中存储字母A出现的次数,cnt[1]存储字母B出现的次数,依次类推;
2)统计个数;

cnt[s[i]-'A']++;

3)定义变量min记录出现次数最少的字母,将其值初始化为s.size()+1,保证后续min的值可以正常更新,当然,你也可以设置一个非常大的整数

int min=s.size()+1,index;

4)如果一个数的出现次数小于min且不为0,那么就更新min和index的值,保证min中始终存储最小出现次数,index中始终存储出现最少次数的字母中ASCII码最小的一个;

for(int i=0;i<26;i++){
        if(min>cnt[i]&&cnt[i]!=0){
            min=cnt[i];
            //index=s[i];
            index=i;
        }
    }

5)index中的值表示出现次数最少的字母中最小的与字符A的ASCII码的差值,因此需要强制类型转换,才能输出对应的字母;

cout<<min<<" "<<(char)(index+'A');

完整代码

#include <iostream>
#include <string>
using namespace std;
int cnt[26];
int main() {
    string s;
    cin >> s;
    for (int i = 0; i < s.size(); i++) {
        cnt[s[i]-'A']++;
    }
    int min=s.size()+1,index;
    for(int i=0;i<26;i++){
        if(min>cnt[i]&&cnt[i]!=0){
            min=cnt[i];
            //index=s[i];
            index=i;
        }
    }
    cout<<min<<" "<<(char)(index+'A');
    return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>