c语言pat基础题改错0821L1027

img

img

img


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

供参考:

#include <stdio.h>
int main()
{
    int i, m, j;
    char ph[12];  
    int  shu[12] = { 0 }, cnt[12] = { 0 }, indexx[12] = { 0 };
       //shu[]记录0~9出现的次数,cnt[]记录出现数字的数值 
    scanf("%s", ph); //输入电话号码 

    for (i = 0; i < 11; i++) 
        shu[ph[i] - '0']++; //相应的数字位计数 
    for (i = 9, m = 0; i >= 0; i--) {//倒序记录电话出现的数字 
        if (shu[i])
            cnt[m++] = i;
    }
    for (i = 0; i < 11; i++) {
        for (j = 0; j < m; j++) {
            if (ph[i] - '0' == cnt[j]) {
                indexx[i] = j;    //搜索到了下标就是index数组中的值 
                break;
            }
        }
    }
    //以下输出 
    printf("int[] arr = new int[]{");
    for (i = 0; i < m; i++) 
        printf(i ? ",%d" : "%d", cnt[i]);
    printf("};\n");

    printf("int[] index = new int[]{");
    for (i = 0; i < 11; i++) 
        printf(i ? ",%d" : "%d", indexx[i]);
    printf("};\n");
    return 0;
}

我的思路如下:

第一行代码不同部分,可以通过排序,然后将不同手机号码数字提取出来实现;

第二行代码不同部分,可以遍历手机号码数字字符,然后逐一与不同数字数组来比较,当相同时,将此下标补充到第二行代码来实现。

代码如下:


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

int main(void){
    
    char arr[50]="int[] arr = new int[]{"; // 第一行代码前面的部分先存入数组arr中 
    char index[50]="int[] index = new int[]{";  // 第二行代码前面的部分先存入数组index中 
    char phone[12];  // 存储手机号码的字符数组 
    
    scanf("%s",phone);  // 获取手机号码 
    
    char tphone[12] ;
    strcpy (tphone,phone);  // 将手机号码备份到字符数组tphone中 
    
    // 按ASCII码从大到小的顺序排序好字符数组phone中的字符,以便后面提取不同的数字 
    for(int i=0;i<(strlen(phone)-1);i++){
        
        for(int j=i+1;j<strlen(phone);j++){
            
            char chi = phone[i];
            char chj = phone[j];
            
            if(chi<chj){
                char temp = phone[i];
                phone[i] = phone[j];
                phone[j] = temp;
            }                
            
        }
    
    }
    
//    printf("after sort , phone = %s\n",phone);
    
    int notSameNumber[11];
    int i=0,j=0;
    char ch=phone[0],pre=' ';
    // 提取手机号码中的不同数字 
    while(phone[i]!='\0'){
        ch = phone[i];
        if(ch!=pre){
            notSameNumber[j]= ch-'0';
            j++;
        }
        pre=ch;
        i++;
    }
    
//    printf("not same number is :"); 
//    for(int k=0;k<j;k++){
//        printf("%d ",notSameNumber[k]);
//    }
//    printf("\n");
//    
    int ai = strlen(arr);
    int ii = strlen(index);
    
    // 将第一行代码剩余部分补充完整,即将电话号码的不同数字按从大到小的顺序添加到第一行代码中 
    for(int k=0;k<j;k++){
        arr[ai] = notSameNumber[k]+'0';
        ai++;
        if(k<(j-1)){
            arr[ai] = ',';
            ai++;
        }else{
            arr[ai++] = '}';
            arr[ai++] = ';';
        }
    }
    arr[ai] ='\0';
    
//    printf("code arr is :%s\n",arr);
    
    //11位电话号码按不同数字数组notSameNumber中的下标,补充到第二行代码剩余部分 
    for(int k=0;k<11;k++){
        
        for(int p=0;p<j;p++){
            if(tphone[k]==(notSameNumber[p]+'0')){
                index[ii] = p+'0';
            //    printf("k=%d,tphone[%d]=%c,p=%d,notSameNumber[%d]=%d\n",k,k,tphone[k],p,p,notSameNumber[p]);
                ii++;
                
                if(k<10){
                    index[ii++]=',';
                }
                
            }
        }            
    }
    index[ii++]='}';
    index[ii++]=';';
    index[ii] = '\0';
    
//    printf("index code is :%s\n",index);
  // 打印结果 
    printf("%s\n",arr); 
//    printf("int[] arr = new int[]{8,3,2,1,0};\n");
    printf("%s\n",index);
//    printf("int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};\n");
    
    return 0;
    
} 

img

【以下回答由 GPT 生成】

回答:

根据你提供的问题内容,我理解你是想在解答c语言PAT基础题0821L1027时遇到了问题,并且你提供的代码中有一些错误。不幸的是,你并没有在问题中明确描述错误的具体情况,所以我无法提供具体的解决方案。

但是根据你提供的代码片段,我可以看到你可能在代码中插入了HTML标签,这使得你的代码不符合C语言的语法规范。C语言代码应该是纯文本的代码,不应该包含HTML标签。

如果你可以提供具体的代码错误信息或者问题的描述,我会尽力给出解决方案的。



【相关推荐】



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