我在codechef基本上的代码

时间:2018-07-24 10:26:23

标签: c

输入1 3 4时,我的代码遇到问题。尽管我找不到任何错误,因为它可以与其他数字/ ps完美配合。旨在解决codechef问题POTATOES

  

问题摘要:编写一个程序,该程序输入一个整数T,然后输入T行,其中T行包含两个以空格分隔的正整数。对于这些行中的每行,输出最小的数字(> 1),将其加到这两个数字的总和上,得出的总和就是质数。

我的代码是

#include<stdio.h>
#include<math.h>
int prime(int a,int b);

int main() {
    int c;
    scanf("%d",&c);
    int a,b,d[c];

    for(a=0; a<c; a++) {
        int x,y;
        scanf("%d %d",&x,&y);
        b=(x+y);
        if(prime(x,y)-b!=0)
            d[a]=prime(x,y)-b;
        else d[a]=prime((x+1),y)-b;
    }
    for(a=0; a<c; a++)printf("%d\n",d[a]);

    return 0;
}

int prime(int a,int b) {
    int c,e;
    for(c=2; c<(a+b); c++) {
        if((a+b)%c==0) {
            b++;
            continue;
        }
        return(a+b);
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码错误。在函数prime()中,由于语句b++;(a+b)(a+b)%c中发生了变化,但递增后的c永不返回。因此,对于较大的质数,代码将失败

例如:-(89,1)(79,1)等

您的代码中也不需要d[c]。您不需要存储所有输出。计算一个输出时,只需打印它即可。即ok与代码厨师。您也可以将问题分为功能。

尝试以下简化代码:-

#include <stdio.h>
#include <math.h>
int prime(int n);
int make_prime(int a);

int main()
{
    int c;
    scanf("%d", &c);
    int a, b;

    for (a = 0; a < c; a++)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        b = (x + y);

        printf("%d\n", make_prime(b));

    }

    return 0;
}

int make_prime(int a) 
{
    int c=1;
    while(prime(a+c)==0){
        c++;
    }
    return c;
}

int prime(int n){ // simple prime function

    int i,flag=1;
    for (i = 2; i <= (n)/2; i++)
    {
        if ((n) % i == 0)
        {
           flag=0;
           break;
        }
    }
    return flag;
}