在线评审问题(错误答案)

时间:2014-12-31 08:28:17

标签: c

Light OJ中的

问题: 1001 - 相反的任务:

这个问题给你一种特殊判断的概念。这意味着法官足够聪明,可以验证您的代码,即使它可能会打印出不同的结果。在这个问题中,你被要求找到上一个问题的相反任务。

具体来说,我有两台电脑存放我的问题。现在我知道问题的总数是n。并且没有重复的问题,每台计算机最多可能有10个问题。您必须在每台计算机中找到问题的数量。

因为可以有多种解决方案。任何有效的解决方案都可以。

输入: 输入以整数T(≤25)开始,表示测试用例的数量。

每个案例都以包含整数n(0≤n≤20)的行开头,表示问题总数。

输出: 对于每种情况,请在一行中打印存储在每台计算机中的问题数。单个空格应该分隔非负整数。 样本输入

输出 样本输入:

3
10
7
7

示例输出:

0(空间)10

0(空间)7

1(空间)6

我的代码:

#include<stdio.h>
#include <stdlib.h>
int main()
{
 int c,sum;
 int i,j,mini=0,maxi;
 int com1,com2;

 do{
     scanf("%d",&c);
 }while (c>25);
 int t[c+1];

 for(i=1; i<=c; i++)
 {
    do{
        scanf("%d",&t[i]);
    }while (t[i]>20);
 }

 for(i=1; i<=c; i++)
 {
    maxi=t[i];
    com1=rand() % (maxi - mini + 1) + mini;
    com2=t[i]-com1;
    printf("%d %d\n",com1,com2);

 }
 return 0;
}

当我提交我的代码时,法官会给出错误的答案。 但是当我在CodeBlocks中编译代码时,它给出了正确的答案。 我不能理解在线评判中的问题。 我该怎么解决呢。

2 个答案:

答案 0 :(得分:1)

您似乎为输入循环了不必要的次数。我保留了您使用的逻辑,从代码中删除了不必要的循环。我在之前的回答中犯了一个愚蠢的错误。

 #include<stdio.h>
 #include <stdlib.h>
  int main()
  {
    int c = 0;
    int maxi=10;

    scanf("%d",&c);
    int t[c];

    for(int i=0; i<c; i++)
      scanf("%d",&t[i]);

    for(int i=0; i<c; i++)
    {
      int com1 = t[i],com2 = 0;
      if (t[i] > 10)
      {
         com1 = 10
         com2 = t[i]-com1;
      }
      printf("%d %d\n",com1,com2);
    }
    return 0;
  }

答案 1 :(得分:1)

对于所有情况,原始帖子都有mini=0,但总问题是&gt; 10可能不起作用。我已经调整了

#include<stdio.h>
#include <stdlib.h>

int main()
{
int c = 0, mini, maxi, i, com1, com2, *t;
scanf ("%d",&c);
t = malloc (c * sizeof(int));
for (i=0; i<c; i++)
    scanf ("%d", &t[i]);
printf("\n");        

for (i=0; i<c; i++) {
    if (t[i]>10) {
        maxi = 10;
        mini = t[i] - 10;
    } else {
        maxi = t[i];
        mini = 0;
    }
    com1 = rand() % (maxi - mini + 1) + mini;
    com2 = t[i] - com1;
    printf("%d %d\n",com1,com2);        
    }
free (t);
return 0;
}

请注意,malloc()scanf()的结果尚未检查过:它们应该是。