亦行之 2024-03-09 15:58 采纳率: 34.5%
浏览 7

PAT1079答案错误求解

img


#include<stdio.h>
//对称相等,步数 ,逆转 
#include<string.h>
int hw(char s[]){//判断回文数的函数 
    int l=strlen(s);
    for(int i=0;i<l;i++){
        if(s[i]==s[l-i-1]){
            continue;
        }
        else{
            return 0;
        }
    }
    return 1;
}
int main()
{
    char s[1001];
    scanf("%s",&s);
    int hw(char s[]);
    int count=0;
    int len,jinwei=0;
    //逆转数组
    char temp;
    while(count<=10){
        len=strlen(s);
        char reverse_s[len],sum[100001];
     for(int i=0;i<len;i++){//逆转 到另一个数组
     reverse_s[i]=s[len-i-1]; 
     }
     //从后向前逐位加和 sum是倒着的 
     int j=0,t;
     for(int i=len-1;i>=0;i--){
         temp=(s[i]-'0' + reverse_s[i]-'0')+jinwei;
         if(temp>=10)//表示有进位
         {
             sum[j]=temp%10+'0';
             j++;
             jinwei=1; 
          } 
          else{//没有进位 
              sum[j]=temp+'0';
              jinwei=0;
              j++;
          }
     } 
     if(jinwei!=0)//最后仍有进位 则进为1 
     sum[j++]=jinwei+'0';
     sum[j]='\0';//尾部 
     //将sum逆转
     int len_sum=strlen(sum);
     int k;
     for(k=0;k<len_sum;k++){
         t=sum[k];
         sum[k]=sum[len-k-1];
         sum[len-k-1]=t;
     } 
     sum[len_sum-1]='\0';//尾 
     printf("%s + %s = %s\n",s,reverse_s,sum);
     if(hw(sum)==1&&count<=10)//是回文数
     {
     printf("%s is a palindromic number.\n",sum); 
     break;
    }
    else{
    for(int i=0;i<len_sum;i++){
        s[i]=sum[i];//又从s开始 
    }
}
     count++;
}
    if(count>=10){
        printf("Not found in 10 iterations.\n");
    }
    return 0;
}

在devc++上运行无法得到正确答案:

img

请问这是为什么,我的逻辑哪里有问题吗

  • 写回答

4条回答 默认 最新

  • 关注

    亦行之 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    经过分析,您的代码中存在一个逻辑错误。在每次循环计算得到新的和sum之后,您没有正确地更新原数s的值。按照题目的要求,下一次迭代应该从当前得到的和sum继续进行逆转和相加的操作,而不是简单地将sum复制给s

    解决方案如下:

    // 在else块(10步以内未得到回文数时)内部,替换原有的s[i]=sum[i]; 代码为:
    memcpy(s, sum, len_sum + 1); // 使用memcpy函数将sum数组的内容复制到s数组
    
    // 然后删除for循环(因为memcpy已经完成了数组内容的复制)
    // for(int i=0;i<len_sum;i++){
    //     s[i]=sum[i];//又从s开始 
    // }
    

    修改后的代码段应为:

    ...
    if (hw(sum) == 1 && count <= 10) {
        printf("%s is a palindromic number.\n", sum);
        break;
    } else {
        memcpy(s, sum, len_sum + 1); // 将sum数组的内容复制到s数组
    }
    ...
    

    这样,在每一次迭代过程中,都会以上一步得到的和作为下一次迭代的基础数字,从而实现题目描述的操作过程。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月9日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真