Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:presentation error!各位大牛In Reply To:presentation error!各位大牛 Posted by:huangjinyc at 2011-04-07 14:05:26 > 帮我看看格式哪儿有问题啊,各位大牛 > #include<stdio.h> > #include<stdlib.h> > #include<string.h> > #define N 6 > char WR[]="Can't be divided.\n"; > char SC[]="Can be divided.\n"; > int marbles[N]={0}; > int marbleA[N]={0}; //分成AB两堆 > int marbleB[N]={0}; > int canBeChangeInB(int changeData) //回溯找是否能在B中找到组合的和等于changeData的大小,能则返回1,否则返回0 > { > int i; > for(i=N-1;i>=0;--i) > { > if(marbleB[i]==0) > { > continue; > } > if(changeData==(i+1)) > { > return 1; > } > if(changeData-(i+1)>0) > { > --marbleB[i]; > if(canBeChangeInB(changeData-(i+1))) > return 1; > ++marbleB[i]; > > } > > } > return 0; > } > int TryMakeEven(int dev) > { > int i; > int sum=0; > for(i=N-1;i>=0;--i) > { > if(marbleA[i]==0) > { > continue; > } > if(canBeChangeInB((i+1)+dev)) > { > return 1; > } > > } > return 0; > } > void findAns(void) > { > int sum=0; > int dev=0; > int i; > for(i=0;i<N;++i) > { > sum+=marbles[i]*(i+1); > } > if(sum%2==1) > { > printf(WR); > return; > } > dev=sum/2; > > for(i=N-1;i>=0;--i) //计算A中还差多少 > { > for(;;) > { > if(marbles[i]==0) > { > break; > } > if(dev-(i+1)>0) > { > dev-=(i+1); > ++marbleA[i]; > --marbles[i]; > } > else if(dev-(i+1)==0) > { > printf(SC); > return; > } > else > { > marbleB[i]=marbles[i]; > break; > } > } > } > if(dev==0) > { > printf(SC); > return; > } > //如果A端还不够,则用A中的某一个和B中的两个或者两个以上的调换 > if( TryMakeEven(dev)) > { > printf(SC); > return; > } > else > { > printf(WR); > return; > } > > } > int main(void) > { > int i=1; > while((scanf("%d %d %d %d %d %d",&marbles[0],&marbles[1],&marbles[2],&marbles[3],&marbles[4],&marbles[5]))!=EOF) > { > if(marbles[0]==0&&marbles[1]==0&&marbles[2]==0&&marbles[3]==0&&marbles[4]==0&&marbles[5]==0) > return 1; > printf("Collection #%d:\n",i); > findAns(); > memset(marbleA,0,N*sizeof(int)); > memset(marbleB,0,N*sizeof(int)); > ++i; > } > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator