【题目链接】
ybt 1067:整数的个数
OpenJudge NOI 1.5 11:整数的个数
【题目考点】
1. 循环统计
2. (扩展)散列表
【题解代码】
解法1:用if语句
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k, a, s1 = 0, s5 = 0, s10 = 0;//s1,s5,s10分别保存1,5,10的个数
cin>>k;
for(int i = 0; i < k; ++i)
{
cin>>a;
if(a == 1)
s1++;
if(a == 5)
s5++;
if(a == 10)
s10++;
}
cout<<s1<<endl;
cout<<s5<<endl;
cout<<s10<<endl;
return 0;
}
解法2:关系表达式的值为0或1,利用这一原理统计数字
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k, a, s1 = 0, s5 = 0, s10 = 0;//s1,s5,s10分别保存1,5,10的个数
cin>>k;
for(int i = 0; i < k; ++i)
{
cin>>a;
s1 += a == 1;//先计算a==1,若a为1,该表达式值为1,s1增加1。否则a==1值为0,s1增加0。
s5 += a == 5;
s10 += a == 10;
}
cout<<s1<<endl<<s5<<endl<<s10<<endl;
return 0;
}
解法3:(扩展)使用散列表
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k, a, s[15]={};//s[1],s[5],s[10]分别保存1,5,10的个数,数组初始值都设为0
cin>>k;
for(int i = 0; i < k; ++i)
{
cin>>a;
s[a]++;
}
cout<<s[1]<<endl<<s[5]<<endl<<s[10]<<endl;
return 0;
}