前言
这道题乍一看感觉怪怪的,然后仔细看看,就会发现没那么难,一起来看一下吧
L1-003 个位数统计
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
解题
OK,那我们现在就来看一下这道题,这道题的分值是15分,也是又臭又长的给了一大堆条件,但是实际用到的并不多,题目的要求就是输入一串数字,然后看看每个数字出现了几次,最后以0:2的形式输出出来
这道题也是有两个难点,如下
(1)数据类型的问题,这一串数字定义成什么类型的变量
(2)怎么把每个数字出现的次数算出来
下面我们先来解决第一个问题,第一个问题的解决其实很简单,这一串数字如果用单个的变量没法定义的话,我们就可以给他定义成一个数组,按顺序把每个数字放到数组里面,这样,这一串数字就被成功的接受到了。就比如这样
int num[100]
scanf("%s",&num);
通过上面的方式,我们就可以把数列存储到一个数组里面
下一个问题,怎么计算每个数字出现的次数,在这里我们要用到一个新的函数:
strlen函数
这个函数的作用是计算所求字符串的长度,比如,我输入了
1001001
这样一个字符串,通过strlen函数的调用,我们会得到,这个字符串的长度为7,具体如下
int n={"1001001"};
printf("%d",strlen(n));
这样运行得出的结果即为 7 。
注:strlen函数使用是必须要包含string.h
好了,既然我们现在已经知道了这个字符串的长度,那么我们就可以对这个字符串的数组的值进行一个累加的操作,也就是用一个数组存储这个值出现的次数。光说的话太干了,下面直接上代码解渴
代码
#include <stdio.h>
#include <string.h>
int main()
{
char str[1000];
int count[10] = {0};
int i = 0;
scanf("%s", str);//输入字符串
for (i = 0; i < strlen(str); i++) {//统计字符串的长度
count[str[i] - '0']++;// 统计字符出现次数,并按顺序保存
}
for(i = 0; i < 10;i++)
{
if(count[i]>0)//判断这个字符是否出现
{
printf("%d:%d\n",i,count[i]);//输出结果
}
}
}
那么到这里,这道题就算是解完了,这么一看,不算难,只不过是对strlen这个函数不熟悉,了解这个函数之后这道题的难度就下来了
以上所有代码均为自己编写,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论
上一题:团体程序设计天梯赛-练习集——L1-002 打印沙漏
标签:数字,int,003,这道题,天梯,L1,字符串,strlen,函数 From: https://blog.csdn.net/shidisy/article/details/145128786