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/