UVA 1588 紫書習題3 11換抵擋裝置

2021-08-31 13:42:16 字數 1739 閱讀 3600

大致題意:給你連個長度分別為n1,n2且每列高度只為1或2的長條,然後將他們拼在一起,高度不能超過3,問他們拼在一起的最短長度。

本體思路:剛開始我的思路是先讓短的在下面,讓上面的不動,通過移動下面的長條來逐一比較,當長條從左到右移動完了之後,就能找到最短。但是**交上去之後 樣例能通過但是一直wa,可能較複雜的資料過不了。(錯誤的思路)

後來看了一下網上的題解,也是通過移動下面的來進行比較,不同的是,它是讓兩個長條都從第乙個元素開始比較,從左到右移動下面的長條。比較完之後,再將上下長條顛倒位置,再比較一遍,這樣就將全部的情況都比較完了。他的這種**書寫很簡單,很值得我借鑑。(正確的思路) 

#include#include#include#includeusing namespace std;

int main()

if(j==lenb)說明都比較一遍之後串a和串b都相等 比較完了之後j==lenb

break;

}if(i+lenb>lena) ans1=i+lenb;

else ans1=lena;

///**和上面的相似

for(i=0;i3)

break;

}if(j==lena) break;

}if(i+lena>lenb) ans2=i+lena;

else ans2=lenb;

ans=min(ans1,ans2);

printf("%d\n",ans);///最終選取兩種方式中較小的;

}return 0;

}

我的**:(錯誤的)

#include #include#include#includeusing namespace std;

int main()

{ char a[105],b[105];

int a1[205],b1[205];

while(~scanf("%s%s",a,b))

{int len1=strlen(a);

int len2=strlen(b);

if(len1=0;j--)

{flag=1;///更新資料

for(int k=0;k知識點:

1、將字串轉化為數字時,我開的陣列太小了  導致一開始一直wa不知道為什麼。下次要注意陣列是否夠大。將數字在字元轉化為數字時,用a[i]-'0';

2、用flag,win做標記時,注意放在的位置,為了更新資料。本題應注意是將flag=1放在for的裡面還是要放在外面。一開始我的**就因為放錯位置了導致找了半天錯誤才找到。很重要的乙個知識點,要記得長記性。

3、可以通過輸出中間資料來檢查**出現的問題。

4、不要用長得很像的識別符號!例如,a,a1,最好不要用。以後設定識別符號時要見名知其意!

UVa 1588 換抵擋裝置

題目大意是說,兩個槽能夠插在一起,並保證每一列的高度不高於3,保證最短長度。思路很簡單,取短字串遍歷長字串的每乙個位置,紀錄下位置,並取最短即可。習題3 11 換抵擋裝置 void caculate17 else int minlen int strlen min arr int maxlen in...

UVA 1588 換低擋裝置

思路 模擬題 注意下標i j 和j的對應字串的匹配關係 注意要模擬從最左邊到最右邊 剛開始做莫名其妙wa,檢查不出錯誤,後面重寫了才過的 ac include include includeusing namespace std char s1 105 s2 105 用字串讀方便 int main ...

劉汝佳書 習題3 11 UVA1588

uva刷題方法 2019.3.26 又是一道看起來很簡單,但卻wa的題 注意 最後一列的末尾沒有換行符,需要判斷eof 思路 a陣列存上面的長條,b陣列存下面的長條 設a陣列的長度為i 那麼b陣列為 i個0 下面的長條的高度 剩下全是0 比如下面這個例子 a 1121 b 000021210000 ...