PTA 个位数统计(C语言)求解答

PTA(C语言)7-149 个位数统计

img

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

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

输入样例:
100311
输出样例:
0:2
1:3
3:1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

img

一直显示答案错误,help me.

应该是代码逻辑有点问题,修改如下,用一个字符数组存储不超过1000位的正整数,然后遍历整个字符数组,统计每个数字出现的次数,然后打印即可,仅供参考。修改如下:
参考链接:
【PTA】【C语言】个位数统计_夜挽鸢的博客-CSDN博客_个位数统计c语言pta


#include <stdio.h>

int main(void){
    
    int n,i,a;
    
    int nums[10]={0};
    
    char c[1001];
    
    scanf("%s",c); //获取不超过1000位的正整数的,存储于一个字符数组 
    
    //遍历字符数组,统计每个数字的个数 
    while(c[i]!='\0'){
        
        
        a = c[i]-'0';
        
        nums[a]+=1;
        
        i++;
        
    }
    
     
    //打印结果 
    for(int i=0;i<10;i++){
        
        if(nums[i]!=0){
            printf("%d:%d\n",i,nums[i]);
        }
    }
    
    return 0;
    
} 

img

统计0-9,定义个10个元素的数组,分别保存0-9
1000位的整数int存不了,因此你的scanf无效;



int main(void)
{
    int i = 0, num[10] = {0};
    char ch;
    while (i < 1000)
    {
        ch = getchar();
        if (ch >= '0' && ch <= '9')
        {
            num[ch - '0']++;
        }
        else if (ch == '\n')
            break;
        i++;
    }
    for (i = 0; i < 10; i++)
    {
        if (num[i])
            printf("%d:%d\n", i, num[i]);
    }
    return 0;
}