c语言pat基础题改错0814L1003

img

img


#include<stdio.h>
int main(){
    int N;
    scanf("%d",&N);
    int flag=0;
    for(;N!=0;){
        N/=10;
        flag++;
    }
    int num[flag];
    int num_record[10]={0};
    for(int i=0;i<flag;i++){
        for(;N!=0;){
            num[i]=N%10;
            N/=10;
            num_record[num[i]]++;
        }
    }
    for(int i=0;i<=9;i++){
        if(num_record[i]>0){
            printf("%d:%d\n",i,num_record[i]);
        }
    }
}

我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!

因为输入的整数最多1000位,所以需要使用字符数组来存储它,然后可以遍历这个数组的每个元素,然后再增加对应的数字个数,循环结束再打印结果即可。

修改如下:



#include<stdio.h>
#include <string.h>

int main(){
    
    //int N;
    // 因为输入的正整数最多1000位,所以这里用一个长度为1001的字符数组来存储输入的整数 
    char str[1001];
    
    //scanf("%d",&N);
    scanf("%s",str);  // 以字符串的形式从输入获取这个正整数 
    
//    int flag=0;
//    for(;N!=0;){
//        N/=10;
//        flag++;
//    }
  //  int num[flag];
    int num_record[10]={0};  //存储数字出现次数的数组,每个元素初始化为0 
    
//    for(int i=0;i<flag;i++){
    for(int i=0;i<strlen(str);i++){  // 遍历输入的数字字符串 
//        for(;N!=0;){
//            num[i]=N%10;
//            N/=10;
//            num_record[num[i]]++;
//        }
        char ch = str[i];    // 获取当前位置的字符 
        if(ch>='0'&&ch<='9'){  // 这个条件是判断字符是否是数字字符,这个不加也可以 
            num_record[ch-'0']++;  // 将对应数字的个数+1 
        }
    }
    
  // 打印结果 
    for(int i=0;i<=9;i++){
        if(num_record[i]>0){
            printf("%d:%d\n",i,num_record[i]);
        }
    }
}

img

供参考:

#include <stdio.h>
int main()
{
    int i = 0, a[10] = { 0 };
    char s[1001];
    scanf("%s", s);
    while (s[i]) {
        a[s[i]-'0']++;
        i++;
    }
    for (i = 0; i < 10; i++)
        if (a[i])
            printf("%d:%d\n", i, a[i]);
    return 0;
}

你的这题代码有点问题,稍等片刻

【以下回答由 GPT 生成】

在你的代码中,主要有两个问题需要解决:

  1. 数组 num 的大小问题:你在定义数组 num 的时候使用变量 flag 作为数组大小,但是 flag 目前是在一个循环中定义的,无法用作数组大小的参数。正确的做法是,首先计算出 N 的位数,然后根据位数定义 num 数组的大小。

  2. 内层循环的问题:在第二个循环中,你使用了一个 for(N!=0;) 的循环,但是在上一个循环中, N 已经变成了 0,导致内层循环不会执行。解决这个问题的方法是,在内层循环之前,将 N 的值保存到一个新的变量中,这样内层循环就可以使用正确的 N 值了。

以下是修改后的代码:

#include<stdio.h>

int main(){
    int N;
    scanf("%d",&N);

    // 计算N的位数
    int temp = N;
    int flag=0;
    while(temp!=0){
        temp /= 10;
        flag++;
    }

    // 定义num数组
    int num[flag];
    int num_record[10]={0};

    temp = N; // 保存N的值
    for(int i=0;i<flag;i++){
        num[i]=temp%10;
        temp/=10;
        num_record[num[i]]++;
    }

    for(int i=0;i<=9;i++){
        if(num_record[i]>0){
            printf("%d:%d\n",i,num_record[i]);
        }
    }
}

希望这个解决方案能够帮助到你!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^