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
댓글 입력