c 訓練題(數字的2 6倍只改變量字的順序)

2021-07-03 17:03:36 字數 1436 閱讀 6685

題目:it can be seen that the number, 125874, and its double, 251748, contains exactly the same digits, but in a different order. find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, contains the same digits.

大概意思是:某些數,比如125874, 2倍為251748, 只改變了數字的順序,沒有改變量字的個數和具體的某個數字。找出最小的乙個整數,這個整數的2倍、3倍、4倍、5倍、6倍,都滿足這個條件。

分析:1.從小到大依次增加,先計算6倍,6倍如果位數增加,則不用計算其他的倍數,且數字也增加一位,比如2的6倍為12,就不用計算2、3、4、5倍了,也不用計算3、4、5、6、7、8、9,直接跳到10.

2.把數字轉換成字串,用stl標準庫自帶的函式來處理。sort函式是自帶的排序函式。

**:

// test.cpp : 定義控制台應用程式的入口點。

///*題目:125874*2=251748,兩數有同樣的數字,只是數字的順序不同,找出滿足規律的最小整數x,x

的2倍,3倍,4倍,5倍和6倍都滿足上述條件,數字相同,順序不同。

分析:1.資料從小到大依次進行

2.先判斷6倍時是否越界,如果越界直接跳到下乙個位數(如2位數跳到3位數的第乙個比如100開始運算)

3.判斷5倍、4倍、3倍、2倍是否數字相同,都轉移到字串上進行運算

*/#include "stdafx.h"

#include #include #include #include #include using namespace std;

//計算數字的位數

int digit(double num)

//看兩個數是否相同,通過轉移到字串上進行計算

bool match(string str1, string str2)

//跳的過程,比如從2直接跳到10

long long init(int digit)

int _tmain(int argc, _tchar* argv)

{ long long num=1;

bool flag=true;

stringstream ss;

string data;

string str;

int i=0;

while(true)

{ int dig=digit(num);//輸入數字的個數

leetcode刷題 只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 自己的 class solution ret...

演算法題 只出現一次的數字 三

給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。找出只出現一次的那兩個元素。示例 輸入 1,2,1,3,2,5 輸出 3,5 注意 結果輸出的順序並不重要,對於上面的例子,5,3 也是正確答案。你的演算法應該具有線性時間複雜度。你能否僅使用常數空間複雜度來實現?先全...

刷題 陣列中只出現一次的數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。第一想法是用雜湊表,但其實浪費了空間。我們可以利用異或運算的特性,任何乙個數字異或自己都等於0。先考慮如果乙個陣列中只有乙個數字只出現一次,那麼只要從頭到尾依次異或陣列中的每乙個數字就能得到那個只出現了一次的...