2014-12-31 1 views
-1

문제 : 1001 - 반대 작업 :온라인 judgeProblem 빛 OJ에서 (오답)

이 문제는 당신에게 맛이 특별 판사의 개념을 제공합니다. 즉 판사가 다른 결과를 인쇄해도 코드를 검증 할만큼 똑똑하다는 의미입니다. 이 문제에서 이전 문제의 반대 작업을 찾아야합니다.

구체적으로 말해서, 나는 문제가 저장된 두 대의 컴퓨터가 있습니다. 이제 문제의 총수가 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에서 코드를 컴파일하는 동안 올바른 대답을 제공합니다. 온라인 판사의 문제를 이해할 수 없습니다. 어떻게 해결할 수 있습니까?

+1

입력 한 내용 만 검사 할 수있는 입력이 아닙니다. 새롭고 복잡한 것도 있습니다. – P0W

+0

코드에서 '미니'는 항상 0입니다. 왜 그런 변수가 있습니까? 또한'main'의 시작 부분에'srand (time (NULL));'을 추가하고'#include ' –

+0

을 입력 해보십시오 가능한 모든 입력과 모든 가능한 난수를 시도 했습니까? –

답변

1

원래 포스트는 모든 경우에 대한 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()의 결과는 확인되지 않았 음을 유의하시기 바랍니다 조정했다.

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; 
    }