#30394: 請高手進來!QQ找規律(第五組測資失敗debug...中)


tinakga920029@gmail.com (云婷)

學校 : 金門縣金城國中
編號 : 190665
來源 : [218.173.75.121]
最後登入時間 :
2022-06-03 12:21:10
a249. 00679 - Dropping Balls -- UVa679 | From: [163.32.125.90] | 發表日期 : 2022-05-18 20:17

1.我列出從第三層開始找出規律,每組球球落點為(4,6,5,7)的倍數
2.舉例 Level 3 共有4個leaf,球球出現順序為(4,6,9,7)做循環*2的0次方
        Level 4 共有8個leaf,球球出現順序為(8,12,10,14,9,13,11,15)做循環,即為(4,6,9,7)做循環*2的1次方+(4,6,9,7)做循環*2的1次方+1
       Level 5 共有16個leaf,即為(4,6,9,7)做循環*2的2次方+(4,6,9,7)做循環*2的2次方+1+(4,6,9,7)做循環*2的2次方+2+(4,6,9,7)做循環*2的2次方+3
3.遇到的bug第五組測資結果有問題QQ
 
#include<stdio.h>
#include<math.h>
int main(){
int level,i,noNum,total;//j代表共有幾組4657 circle代表幾個一循環
scanf("%d",&total);
scanf("%d%d",&level,&noNum);
for(i=1;i<=total;i++){

int ans=0,n=0,start=0,leaf=0;
if(level==2){
if(noNum%2==0){
printf("3\n");
}
else if(noNum%2==1){
printf("2\n");
}
}
else{
start=pow(2,level-3);
leaf=pow(2,level-1);
 
n=(noNum%leaf)%4;
switch(n){
case 1:{ans=4*start+((noNum%leaf)/4);printf("%d\n",ans);}
case 2:{ans=6*start+((noNum%leaf)/4);printf("%d\n",ans);}
case 3:{ans=5*start+((noNum%leaf)/4);printf("%d\n",ans);}
case 0:{ans=7*start+((noNum%leaf)/4);printf("%d\n",ans);}
default:break;
}
 
 
}
scanf("%d%d",&level,&noNum);
}
 
 
return 0;
}
 
 
#30395: Re: 請高手進來!QQ找規律(第五組測資失敗debug...中)


tinakga920029@gmail.com (云婷)

學校 : 金門縣金城國中
編號 : 190665
來源 : [218.173.75.121]
最後登入時間 :
2022-06-03 12:21:10
a249. 00679 - Dropping Balls -- UVa679 | From: [163.32.125.90] | 發表日期 : 2022-05-18 20:31

補了一些程式碼的註解
 
 
1.我列出從第三層開始找出規律,每組球球落點為(4,6,5,7)的倍數
2.舉例 Level 3 共有4個leaf,球球出現順序為(4,6,9,7)做循環*2的0次方
        Level 4 共有8個leaf,球球出現順序為(8,12,10,14,9,13,11,15)做循環,即為(4,6,9,7)做循環*2的1次方+(4,6,9,7)做循環*2的1次方+1
       Level 5 共有16個leaf,即為(4,6,9,7)做循環*2的2次方+(4,6,9,7)做循環*2的2次方+1+(4,6,9,7)做循環*2的2次方+2+(4,6,9,7)做循環*2的2次方+3
3.遇到的bug第五組測資結果有問題QQ
 
#include<stdio.h>
#include<math.h>
int main(){
int level,i,noNum,total;//total代表讀入的組數;level代表樹的高度;noNum代表落入的第幾顆球
scanf("%d",&total);
scanf("%d%d",&level,&noNum);
for(i=1;i<=total;i++){//用一個迴圈控制有幾組測資
int ans=0,n=0,start=0,leaf=0;//ans代表第noNum顆球落在哪個位子;start代表leaf號碼是4,6,5,7的規律中的倍數;leaf代表該compelet tree有多少leaf;n代表當noNum輸入後重複幾次後會落在第幾組的4,6,5,7,
if(level==2){//當level樹高為2時候直接判做作印出
if(noNum%2==0){
printf("3\n");
}
else if(noNum%2==1){
printf("2\n");
}
}
else{//當level樹高是3以上
start=pow(2,level-3);//start用來計算規律的倍數,例如level4 的leaf起始號碼為8(4*2的1倍);level 5 的leaf起始號碼為16(4*2的2倍)
leaf=pow(2,level-1);//求出該compelet tree有多少leaf
n=(noNum%leaf)%4;//如果是第一組餘數為0如果是第一組餘數為0;
switch(n){
case 1:{ans=4*start+((noNum%leaf)/4);printf("%d\n",ans);}
case 2:{ans=6*start+((noNum%leaf)/4);printf("%d\n",ans);}
case 3:{ans=5*start+((noNum%leaf)/4);printf("%d\n",ans);}
case 0:{ans=7*start+((noNum%leaf)/4);printf("%d\n",ans);}
default:break;
}
 
 
}
scanf("%d%d",&level,&noNum);
}
 
 
return 0;
}
 
 
#30399: Re: 請高手進來!QQ找規律(第五組測資失敗debug...中)


tinakga920029@gmail.com (云婷)

學校 : 金門縣金城國中
編號 : 190665
來源 : [218.173.75.121]
最後登入時間 :
2022-06-03 12:21:10
a249. 00679 - Dropping Balls -- UVa679 | From: [218.173.89.152] | 發表日期 : 2022-05-19 00:11

Debug::::

此規律在level5之後的餘數相加並非由0~3而是0,2,1,3。故此種寫法從level5開始會錯誤

::::感謝站內大神提供AC code

 

 

 
ZeroJudge Forum