存疑201703(已解決)map的使用

2021-10-21 06:53:16 字數 2030 閱讀 6085

問題:

經檢驗: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...