a0000網(wǎng)站建設(shè)2022年seo最新優(yōu)化策略
1.題目描述
每當(dāng)貝茜將數(shù)字轉(zhuǎn)換為一個新的進(jìn)制并寫下結(jié)果時,她總是將其中的某一位數(shù)字寫錯。
例如,如果她將數(shù)字 14 轉(zhuǎn)換為二進(jìn)制數(shù),那么正確的結(jié)果應(yīng)為 1110,但她可能會寫下 0110 或 1111。
貝茜不會額外添加或刪除數(shù)字,但是可能會由于寫錯數(shù)字的原因,寫下包含前導(dǎo) 0 的數(shù)字。
給定貝茜將數(shù)字 N 轉(zhuǎn)換為二進(jìn)制數(shù)字以及三進(jìn)制數(shù)字的結(jié)果,請確定 N 的正確初始值(十進(jìn)制表示)。
輸入格式
第一行包含 N 的二進(jìn)制表示,其中一位是錯誤的。
第二行包含 N 的三進(jìn)制表示,其中一位是錯誤的。
輸出格式
輸出正確的 N 的值。
數(shù)據(jù)范圍
N 一定不超過 109,且存在唯一解。
輸入樣例
1010
212
輸出樣例
14
2.思路分析
有一個十分簡單的思路,把二進(jìn)制數(shù),所有可能的數(shù)都計算出來,存下來。
再把三進(jìn)制所以可能的數(shù)計算出來,存下來。
兩者的交集,所共同擁有的數(shù)字,一定是正確答案。
首先,需要枚舉,改變二進(jìn)制每一位對應(yīng)的數(shù),直接異或取反即可,
然后將異或后的結(jié)果根據(jù)秦九韶算法轉(zhuǎn)換成10進(jìn)制數(shù)并保存到哈希數(shù)組中,
最后改變?nèi)M(jìn)制每一位對應(yīng)的數(shù),轉(zhuǎn)成10進(jìn)制后判斷其是否在哈希數(shù)組中存在
3.秦九韶算法
秦九紹算法是非常高效的轉(zhuǎn)換為十進(jìn)制數(shù)的算法,因為他可以計算多項式,我們便把他用于了其它進(jìn)制向十進(jìn)制的轉(zhuǎn)換中,
4.Ac代碼
import java.io.*;
import java.util.HashSet;public class Main {public static void main(String[] args) throws IOException {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String s1=br.readLine();String s2=br.readLine();//轉(zhuǎn)換成字符數(shù)組,字符串無法異或char []c1=s1.toCharArray();char []c2=s2.toCharArray();HashSet<Integer> hs=new HashSet<>();for (int i = 0; i < c1.length; i++) {//將每位數(shù)字異或取相反數(shù)字c1[i]^=1;//轉(zhuǎn)換為10進(jìn)制數(shù)后添加到哈希表中hs.add( change(c1,2));//然后轉(zhuǎn)換回來,方便下一位轉(zhuǎn)換c1[i]^=1;}for (int i = 0; i < c2.length; i++) {char t=c2[i];for(char j='0';j<'3';j++){//如果c本位等于當(dāng)前的值則跳過繼續(xù),因為必定會錯一位if(c2[i]==j) continue;//如果不是則賦j值c2[i]=j;if(hs.contains(change(c2,3))){System.out.println(change(c2,3));return;}c2[i]=t;}}}//根據(jù)秦九韶算法將其他進(jìn)制轉(zhuǎn)換為10進(jìn)制數(shù)private static Integer change(char c[], int t) {int re=0;for (int i = 0; i < c.length; i++) {re=re*t+c[i]-'0';}return re;}}
感謝你能看完, 如有錯誤歡迎評論指正,有好的思路可以交流一波,如果對你有幫助的話,點(diǎn)個贊支持下