問題:
經檢驗:map使用沒有問題,find查詢,直接mp[t0]得到鍵值都沒有問題。
問題:1,字元判斷空格和換行結束的問題。原因字串str壓根不會輸入』\n』換行符。所以用長度判斷終止。
2,在使用gets、getline時,如果前面使用過scanf,cin。則需要吸收換行符。
問題3,成員層次還沒算對。d和num1,num2都被修改了,所以需要新定義dis=d來儲存原始層次差。詳見**二。
for
(i=i+
1;s[i]
!=' '
&&ilength()
;i++
)return d;
}int
main()
for(i=i+
1;s[i]
!=' '
&&ilength()
;i++)if
(s[i]
==' '
)int f=mp[t0]
;//找第乙個人的下標
mp[t1]=2
*f;//左孩子
mp[t2]=2
*f+1
;//右孩子
str[
2*f]
=t1;
//更新str
str[
2*f+1]
=t2;
}else
break;}
/* map::iterator it=mp.find(t0);
int num1=it->second;
it=mp.find(t1);
int num2=it->second;
*/int num1=mp[t0]
,num2=mp[t1]
;int d=
depth
(num1)
-depth
(num2);if
(d>0)
}else
if(d<0)
}while
(str[num1]
!=str[num2]
)printf
("%s %d\n"
,str[num1]
.c_str()
,abs
(depth
(num1)
-depth
(num2)))
;return0;
}
注意的點:
1.while(getline(cin,s))
return d;
}int
main()
for(i=i+
1;s[i]
!=' '
&&ilength()
;i++)if
(s[i]
==' '
)int f=mp[t0]
;//找第乙個人的下標
mp[t1]=2
*f;//左孩子
mp[t2]=2
*f+1
;//右孩子
str[
2*f]
=t1;
//更新str
str[
2*f+1]
=t2;
}//else break;//加上break會自動輸出答案否則需要ctrl+z
s.clear()
;}int num1=mp[t0]
,num2=mp[t1]
;int d=
depth
(num1)
-depth
(num2)
;int dis=d;
if(d>0)
}else
if(d<0)
}while
(str[num1]
!=str[num2]
)printf
("%s %d\n"
,str[num1]
.c_str()
,abs
(dis));
return0;
}
存疑pata1025 已解決)排名
演算法筆記105頁 我的方法是只排一次名 include include include using namespace std 思路 在輸入時記錄學校,全輸入完成後統一排序,計算排名。排名分為兩類,總排名i.fr和學校排名i.sch.lr。累計 算人次 排名fr和當前 算不同成績個數 排名sch....
存疑607A(已解決)操作沒有輸出就結束了
題目 問題 操作沒有輸出就結束了,以及輸入m 4,但輸入3個操作就結束了。改正 char 陣列的比較 strcmp if temp show 問題2 get函式的輸出for i 0 p null i include include struct node node create int array,...
存疑578B(已解決)月份一一對應
題目 注意 字串使用char month 13 13 中間使用雙引號和逗號。單引號不可以 if while使用錯誤,num沒有清零,d0與num位置寫錯。問題二,時間超限,答案錯誤。問題 if d0 ym isleap y m0 1 april may june july august septem...