c - 在线判断问题(错误答案)

标签 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 中编译代码时,它给出了正确的答案。 我无法理解在线法官的问题。 怎么解决。

最佳答案

原始帖子对所有情况都有 mini=0,但如果问题总数 > 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() 的结果尚未经过检查:它们应该经过检查。

关于c - 在线判断问题(错误答案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27718330/

相关文章:

c - Ptrace 为 execve 捕获许多陷阱

c - read() 从文件中返回额外的字符

C 中的注释部分和注释 block

使用 Vivado HLS 2019 更改订单分析设计文件我的项目

c - C中的编译器如何获得数组第一个元素的地址和整个数组的地址之间的差异?

c++ - C/C++ 中的跨平台自定义文件头

C 编程 - 如何将 char 写入 char*

c - gSOAP 不正确的响应数据

c - 错误 : before token on <stdio.

c - 打印第二个字符串会导致第一个字符串在 C 中重复出现