修改后的程序见附件
#includeiostream#includecmathusingnamespacestd;intmain(){intN,D,K;intcows,max=0;cinNDK;intcount[1000];booldisease[1000][15]={false};intt,i,j;for(i=0;iN;i++){cincount;for(j=0;jcount;j++){//countdiseasesofacowcint;disease[t]=true;~~~~~~~~~~~~~~~~~~~~~~~~~~~`题目中给定的diseases范围是1到D,而你的程序把这个范围当作0到D-1做的,所以这里应该改为disease[t-1]=true}}//step1:chooseKdiseasesfromDdiseasesintchosen,chosenMax=pow(2,D)-pow(2,D-K);//chosenisanintegerfrommintomaxintKcounter;//count1ofchosenintchosen2;for(chosen=pow(2,K)-1;chosen=chosenMax;chosen++){Kcounter=0;chosen2=chosen;for(i=0;iD;i++){if(chosen21)Kcounter++;//ifthelastdigitofchosenis1,Kcounter++chosen2=chosen21;//preparetoseenextdigit}if(Kcounter!=K)continue;//chosen=6;//step2:Kdiseaseschosen,checkthecowscows=0;for(i=0;iN;i++){if(countK)continue;for(j=0;jD;j++){if((chosen(D-1-j))1)continue;if(disease[j]==true)break;/*cows++;*/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cows++的位置不对,应该在循环外,并且前提是没有break出循环}if(j=D)cows++;/*应该在这里*/}if(maxcows)max=cows;//findthemaximumofcowsunderdifferentchosenKdiseases.}///*coutcowsendl;*/~~~~~~~~~~~~~~~~~`输出max而不是cowscoutmaxendl;return0;}
ACD (心強) 在 ta 的帖子中提到:我难受死了想砸了电脑然后自杀 |