问题: 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中编译代码时,它给出了正确的答案。 我不能理解在线评判中的问题。 我该怎么解决呢。
答案 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()
的结果尚未检查过:它们应该是。