亦行之 2024-03-06 10:33 采纳率: 34.5%
浏览 6
已结题

PAT1007C语言测试点1通不过去,求解!

img

#include<stdio.h>
#include<math.h>
int isPrime(int a){
    if(a<2) return 0;
    for(int i=2;i<=(int)sqrt(a);i++){//用sqrt开根号否则会超时 
        if(a%i==0)//不是
        {
            return 0;
         } 
    }
    return 1;
}
int main()
{
    int isPrime(int a);
    int n,j=0;
    scanf("%d",&n);    
    int su[n];//存储所有素数 
    for(int i=3;i<n;i++){
        if(isPrime(i))//是素数
        {
            su[j]= i;
            j++;
         } 
    }
    int count=0,k=1;
    while(k<j)//j=7
    {        if(su[k]-su[k-1]==2)
        count++;
        k++;
    }
/*    for(int k=1;k<j;k++){
        if(su[k]-su[k-1]==2){
            count++;//满足则++ 
        }
    }*/
    printf("%d",count);
    return 0;
 } 

提交到pta后测试点1为什么一直通不过啊:

img

  • 写回答

4条回答 默认 最新

  • 关注

    亦行之 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    根据测试结果,你的程序在部分测试点上通过了,但在测试点1上出现了错误。在测试的过程中,尽可能使用不同的输入值进行测试,以确定问题所在。

    以下是一些可能导致问题的原因和解决方案:

    问题可能出现在素数判断函数isPrime()中。请检查该函数是否正确地判断了输入的数是否为素数,并且在计算平方根时是否使用了正确的函数sqrt()。

    • 解决方案: 首先,你可以在isPrime函数中打印出每次的i和a,以便检查函数执行的正确性。其次,检查sqrt()函数的使用是否正确,你可以尝试使用一个较小的输入值,比如2或3,来验证该函数是否能正确判断素数。如果发现问题,可以调试并修改isPrime函数,确保它能正确地判断素数。

    另一个可能的问题在于素数对的计算。你的代码中,你首先存储素数到数组su中,然后计算素数对的个数。请检查计算素数对时是否考虑到了数组su中的元素。

    • 解决方案: 在计算素数对时,你需要将数组su中的元素进行比较。可以使用一个循环来遍历数组su,并计算相邻素数的差值。同时,你需要确保计算素数对时使用的循环边界是正确的。

    最后,你还可以尝试在测试点1上手动输入一些测试数据,以便更好地理解代码执行过程中的问题所在,并通过调试来解决。

    记得要按照修复后的代码重新提交给pta进行测试。

    希望对你有所帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥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仿真