您的位置:首页 > 其它

团体程序设计天梯赛-练习集 L1-003 个位数统计

2017-03-23 13:28 246 查看
团体程序设计天梯赛-练习集 L1-003个位数统计

原题如下:


L1-003. 个位数统计

时间限制

400 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

陈越

给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1,
dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。

输入格式:

每个输入包含1个测试用例,即一个不超过1000位的正整数N。

输出格式:

对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。
输入样例:
100311

输出样例:
0:2
1:3
3:1


笔者第一次做该题时用的比较粗暴的方法,无非进行遍历,代码如下:

#include <stdio.h>
int main()
{
int a[10];
char n[10000];
int i,j=0;
gets(n);
for(i=0; i<10; i++)
a[i]=0;
i=0;
while(n[i]!='\0')
{
if(n[i]=='0')
a[0]++;
else if(n[i]=='1')
a[1]++;
else if(n[i]=='2')
a[2]++;
else if(n[i]=='3')
a[3]++;
else if(n[i]=='4')
a[4]++;
else if(n[i]=='5')
a[5]++;
else if(n[i]=='6')
a[6]++;
else if(n[i]=='7')
a[7]++;
else if(n[i]=='8')
a[8]++;
else if(n[i]=='9')
a[9]++;
i++;
}
for(i=0; i<10; i++)
{
if(a[i]>0)
j++;
}
for(i=0; i<10; i++)
{
if(a[i]>0)
{
printf("%d:%d\n",i,a[i]);
j--;
}
if(j==1)
break;
}
for(i=i+1; i<10; i++)
{
if(a[i]>0)
{
printf("%d:%d",i,a[i]);
break;
}
}
return 0;

}


写完后灵机一动,想到了set容器的唯一性,以及vector容器的count()计数功能,故改进代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{
char temp[1005];
set<int>numset;
vector<int>numvec;
gets(temp);
for(int i=0; temp[i]!='\0'; i++)
{
numset.insert(temp[i]-48);
numvec.push_back(temp[i]-48);
}
set<int>::iterator it;

for(it=numset.begin(); it!=numset.end(); it++)
cout<<*it<<":"<<count(numvec.begin(),numvec.end(),*it)<<endl;
return 0;
}



提交结果就不截图了,上述方法都能得满分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: