Problem D 你的名字

2021-10-02 00:25:19 字數 1523 閱讀 1464

description

你的名字?以及說出你的身份證號碼。在某個世界有正好十億人,神的眼中,每個人都擁有乙個整數作為靈魂編碼(1~1000000000)。神提供了兩種操作改變你的靈魂編碼:

將當前整數乘以2。(比如從3變成6)。

在當前整數的右邊新增1。(比如從3變成31)。

我的靈魂編碼是a,她的靈魂編碼是b。我能變成她麼(在一系列操作後使得a==b)?

input

輸入包含多組資料測試,每組資料報含整數a,b,(1 ≤ a < b ≤ 1000000000)。(建議使用long long儲存數字)

output

如果我能通過神提供的兩種操作將我變成她那麼輸出yes,否則輸出no。如果可以的話請輸出最少執行多少次,以及執行的具體過程。

sample input

1 31 4

1 1111

sample output

noyes 2

1 2 4

yes 3

1 11 111 1111

解題分析:1.剛讀完題,思緒萬千,以為這題很難,根本不知道從何處下手。

2.但仔細分析兩種操作,容易得到,如果b%2=0或者b%10=1,a就可以通過上述兩種操作得到b;

但我們會因此陷入乙個誤區,有可能寫出只能通過操作1或者只能通過操作2,將a變成b;

請看下面錯誤**

#

include

intmain

(void)if

(a==b)

printf

("\n");

}else

printf

("no\n");

}else

if(b%

10==1)

if(a==b)

printf

("\n");

}else

printf

("no\n");

}else

printf

("no\n");

}return0;

}

顯然當輸入1 21時輸出是錯誤的,錯誤的原因就在於此**無法分別運用兩種操作。

3.而怎麼擺脫這個誤區呢?我們可以逆向思維,如果b通過這兩種操作的反向操作變成a,也就成功了。

下面為根據此修改的ac**

```cpp

#include

intmain

(void

)else

if(b%

10==1)

else

break;}

c[i]

=a;if

(a==b)

printf

("\n");

}else

printf

("no\n");

}return0;

}

Problem D 你的名字

time limit 1 sec memory limit 128 mb submit 1098 solved 265 你的名字?以及說出你的身份證號碼。在某個世界有正好十億人,神的眼中,每個人都擁有乙個整數作為靈魂編碼 1 1000000000 神提供了兩種操作改變你的靈魂編碼 1.將當前整數乘以...

你的名字。oj

time limit 2000ms memory limit 65536kb problem description 不管你在世界的哪個地方,我一定會,再次去見你的。電影 你的名字。中,由男主角瀧和女主角三葉夢幻般的交換身體的經歷,引發了一段奇幻動人的故事。令人意想不到的是,電影中二人的互換不僅跨越...

你會劃掉誰的名字?

美國的一所大學,在快下課時教授對同學們說 我和大家做個遊戲,誰願意配合我一下。一女生走上台來。教授說 請在黑板上寫下你難以割捨的二十個人的名字。女生照做了。有她的鄰居 朋友 親人等等。教授說 請你劃掉乙個這裡面你認為最不重要的人。女生劃掉了乙個她鄰居的名字。教授又說 請你再劃掉乙個。女生又劃掉了乙個...