c언어 코딩은짯는데 입력값이 많아지면 값이 안나오네요 ㅠㅠ

조회수 895회

아래 코드가 제가 짠코드인데

문제는 아래링크입니다 http://www.usaco.org/index.php?page=viewproblem2&cpid=674

지금 발생하는문제는 입력값이 적으면 잘돌아가는데 커지면 원래 3이나 4여야 하는 값들이 250493823, 1603482372처럼 이상하게 바뀌면서 값이 이상하게나오고 돌릴때마다 다른값이 나온다는거에요 ㅠㅠ


#include <stdio.h>

#include <stdlib.h>



void swap(unsigned int *as,unsigned int *bs);

void sort(unsigned int *base,unsigned int n);

void sort1(unsigned int *base1,unsigned int n1);

void fout(unsigned long long out);

int main(void)
{



    FILE *fp1;
    unsigned int e,n,k,cnt,nn;
    unsigned int d,p,m,h;
    unsigned int *b = NULL;
    unsigned int a[100000][11];
    unsigned int i,j;
    unsigned long long int out=0;
    unsigned int l=1;
    unsigned int dot[10];





    fp1 = fopen("input.in","r");

    fscanf(fp1,"%u %u",&n,&k);





    for(i=0;i<n;i++)
    {
        j=1;
    for(fscanf(fp1,"%u",&a[i][0]);a[i][0]>=j;j++)
    {
        fscanf(fp1,"%u ",&a[i][j]);
    }

    }
fclose(fp1);





cnt=0;
nn=10;

while(cnt < n)
{

l=1;
if(n-cnt < 10)
nn = n-cnt;


e=cnt;
for(i=0;i<nn;i++)
    {
    printf("%u %u \n",cnt,a[cnt][0]);
    sort1(  a[cnt] , a[cnt][0]);

    l=l*a[cnt][0];
        dot[i]=l;
        cnt++;


    }




b = (unsigned int*)malloc(sizeof(unsigned int) *(nn*k));

d=0;
while(1)
{

p=0;

        for(i=1,m=1; i <= (dot[d]) ;i++,m++)
        {

            if(m > a[e][0])     m=1;
            for(j=0;j < ( l / (dot[d]) );j++)
            {

            printf("%u %u %u\n",e,m,a[e][m]);
                b[p]= b[p]+a[e][m];

            p++;

            if( p > (nn*k) )        break;
            }

            if( p > (nn*k) )        break;
    }



if( d==nn ) break;

d++;

e++;
}





sort(b,(nn*k));



for(i=0;i<k;i++)
printf("%u ",b[i]);

for(i=0;i<k;i++)
out +=  (unsigned long long int)b[i];

if(b)
{
free(b);
b = NULL;
}

}



printf("\n%llu\n",out);

fout(out);






    return 0;
}


void swap(unsigned int *as,unsigned int *bs)
{
    unsigned int ts;
    ts=*as;
    *as=*bs;
    *bs=ts;
}




void sort(unsigned int *base,unsigned int n)
{

    unsigned int i,j;





    for(i=0;i<n;i++)
    {

        for(j=i;j<n;j++)
        {
        if(base[j]==0)
        continue;
        if(base[i]>base[j])
        swap(&base[i],&base[j]);
        }

    }


}

void sort1(unsigned int *base1,unsigned int n1)
{

    unsigned int i1,j1;

    for(i1=1;i1<n1;i1++)
    {

        for(j1=i1;j1<=n1;j1++)
            if(base1[i1]>base1[j1])
        swap(&base1[i1],&base1[j1]);


    }
}




void fout(unsigned long long int out)
{
    FILE *fp2;
    fp2 = fopen("output.out","w");
    fprintf(fp2,"%llu\n",out);
    fclose(fp2);


}

1 답변

  • 우선 목적이 무엇인지 여부와 제시된 코드는 무엇을 하는 코드인지 설명이 필요할 것 같습니다.

    주석도 한줄 없고 변수명도 엉망(a, b, i1, j1 등등)인 코드를 읽는 것은 수월한 작업이 아닙니다.

    일단 작은 수를 넣으면 예상한 결과가 나오나 큰 수를 넣으면 이상한 수가 나오는 부분은 추측컨데 int 사이즈(2,147,483,647)를 넘어서 그럴겁니다.

    • ㅠㅠ제가 너무 막적긴했습니다.. 그런데 자료형범위는 다 만족하게 만들었어요... 큰수가 아니라 입력값을 많이 40개 이상넣는경우에 이상한값이 나오기시작합니다 알 수 없는 사용자 2017.5.6 13:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)