PTA-团体程序设计天梯赛-练习集L1-003(C语言)
PTA-团体程序设计天梯赛-练习集L1-003(C语言)这几天正在做PTA这个团体程序设计天梯赛上面的题,虽然有的题并不难,但还是会出现很多的问题。下面是这几天做的其中一个题:如果没有这个位数要求的话,先设一个长度为10并且每个的值都初始化为0的数组,对传进来的数求余所得数即为数组下标,将对应数组的数值自增1即可。代码如下:#include <stdio.h>int Count_Dig
·
PTA-团体程序设计天梯赛-练习集L1-003(C语言)
这几天正在做PTA这个团体程序设计天梯赛上面的题,虽然有的题并不难,但还是会出现很多的问题。
下面是这几天做的其中一个题:
如果没有这个位数要求的话,先设一个长度为10并且每个的值都初始化为0的数组,对传进来的数求余所得数即为数组下标,将对应数组的数值自增1即可。代码如下:
#include <stdio.h>
int Count_Digit ( const int N, const int D );
int main()
{
int N, D;
scanf("%d %d", &N, &D);
printf("%d\n", Count_Digit(N, D));
return 0;
}
int Count_Digit ( const int N, const int D )
{
int n = N, s;
int p[10] = {0};
if(n == 0 && D == 0)
{
return 1;
}
if(n<0)
{
n = -n;
}
while(n)
{
s = n % 10;
p[s]++;
n /= 10;
}
return p[D];
}
但在这个题中,主要是这个是有关大数的存储问题,其实好多时候我们都会碰到大数问题,比如求阶层之和、求两个大数的乘积等等,此时就不是简简单单定义一个整型或者长整型就可以解决问题。
分析:
- 借用上面不用大数时的思想,也定义一个长度为10并且每个单元值都初始化为0的数组,用来装不同位数出现的个数
- 其次,由于数的位数太多,就要定义一个数组:
char N[1001]; //如果用gets()会多一个'\0',需要多来一个位置
//但是如果用scanf("%s",&N);则可定义为N[1000]
//这个也是本题的一个测试点
- 最后用switch语句,判断每位的数字(下标),每找见一次,就让对应的数组中的值自增1;
代码如下:
#include <stdio.h>
main()
{
char N[1001];
int a[10]={0};
gets(N);
for(int i = 0; N[i] != '\0'; i++){
switch(N[i]){
case '0':a[0]++;break;
case '1':a[1]++;break;
case '2':a[2]++;break;
case '3':a[3]++;break;
case '4':a[4]++;break;
case '5':a[5]++;break;
case '6':a[6]++;break;
case '7':a[7]++;break;
case '8':a[8]++;break;
case '9':a[9]++;break;
}
}
for(int i = 0; i < 10; i++)
{
if(a[i]!=0)
{
if(i<9)
{
printf("%d:%d\n", i, a[i]);
}
else
{
printf("%d:%d", i, a[i]);
}
//题目要求结尾无空行
}
}
}
除此之外,还有一种思路:
利用ASCII码,我们可以判断出 N[i]-‘0’ 即为下标;
此时,代码如下:
#include<stdio.h>
main(){
char N[1000];
int a[10] = {0};
scanf("%s",&N);
for(int i = 0; N[i] != '\0'; i++){
a[N[i]-'0']++;
}
for(int i = 0; i < 10; i++){
if(a[i]!=0){
if(i<9)
{
printf("%d:%d\n", i, a[i]);
}
else
{
printf("%d:%d", i, a[i]);
}
}
}
}
这个题的特点:
- 正好是0~9,可以定义一个长度为十的数组来进行保存每个数出现的次数
- 可以利用ASCII码
总结:
对于这个题,虽说简单吧,但是中间也夹杂着许多的小问题,需要琢磨理清楚。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)