演算法 魔法世界中的傳送門

2021-10-09 11:20:25 字數 2079 閱讀 5539

一座魔法城市,城市中的各個地點由正整數1到n標記。為了快捷穿梭於不同地點,法師們在每個地點都建造了傳送門。這些門都有乙個特點,就是只能傳送到自己所在地點標記數的倍數的地點。例如,地點10的傳送門可以傳送到地點20、地點30、地點40等,但不能傳送到地點2、地點3、地點5等。如需到達不能傳送的地點,則只能走路過去。

使用傳送門時瞬間完成的,不需要耗費時間。走路耗費的時間則為兩個地點標記值之差的絕對值。例如,從地點7走到地點5,需要的時間為2。

法師學徒安東尼需要去城市的不同地點修煉,聰明的你能幫助他合理規劃路線,從而以最短的時間穿梭於不同的地點嗎?

輸入描述:

輸入兩個正整數s和e,以空格分隔,表示起始和結束地點。(1<=s<=7  ;  1<=e<=1000000000)

輸出描述:

3行輸出

第一行輸出從地點s到地點e的最短時間(如果s等於e則為0)

第二行輸出最短時間下從地點s到地點e途徑的城市數(城市數包括地點s和地點e本身,如果s等於e則為1;若存在多個結果,輸出任意乙個即可)

第三行輸出第二行城市數對應的城市標記值序列,以空格分隔(城市序列包括地點s和地點e本身,如果s等於e則只輸出s)

舉例說明:

輸入:5 7

輸出:2 

2 5 7

輸入:5 28

輸出:5 4 28

備註:

對於起始點為5,結束點為28的情況,因為5*6=30、30-28=2,所以路線的最小時間不會大於2;

又因為任何數字都可以寫成質數乘積的形式(如果該數字為質數則為自身),28=2*2*7,其中2*2=4=5-1,所以可以得出一條最短時間的路徑: 5 4 28

參考:我的理解:

1.驗證質數(即只能被1和自身整除的數)

2.拆解任意數得到質數乘積(28=2*2*7)

3.分情況,如果e不是質數可以拆解,那麼城市數一定為3;如果e是質數,那麼城市數可能為4或更多

下面給出程式:只考慮到e不是質數的情況

#include#include#includeusing namespace std;

int isprime(int n)

} return 1;

}void calprimevector(int n, vector&nums)

else

}n /= i;

} while (!isprime(n));

nums.push_back(n);

} sort(nums.begin(), nums.end());

}void calmintimesnums(vectornums, vector&mintimesnums)

}} else

mintimesnums.push_back(times);

} }sort(mintimesnums.begin(), mintimesnums.end());

}int main()

if (e_%s_ != 0&&!isprime(e_))

//cout << endl;

vectormintimesnums;

calmintimesnums(nums, mintimesnums);

vectortmp(mintimesnums.size());

for (int i = 0; i < mintimesnums.size(); i++)

//cout << endl;

int minloc, minval = 1e10;

for (int i = 0; i < tmp.size(); i++)

} int mid = mintimesnums[minloc];

cout << abs(s_ - mid) << endl;

cout << 3 << endl;

if (s > e)

else

} else

else

}//cin >> e;

return 0;

}

類的內建方法(魔法方法)

凡是在類內部定義,以 開頭 結尾的方法都是類的的內建方法,也稱為魔法方法 類的內建方法,會在某種條件滿足下自動觸發 在呼叫類時自動觸發 在 init 觸發前自動觸發,呼叫該類是,內部會通過 new 產生乙個新的物件 class demo 在 init 觸發前自動觸發 def new cls,args...

Python的魔術方法(魔法方法)(二)

本篇介紹運算相關,算術運算子和型別轉換的相關魔法方法。class person def init self,name,age self.name name self.age age per1 person 豬八戒 18 per2 person 豬八戒 18 per3 person 孫悟空 20 以上...

Php5中類的保留方法 「魔法方法」

php5中類的保留方法 魔法方法列表如下 1,contruct 建立類的乙個新例項時呼叫 2,destory 類的乙個例項從記憶體中刪除時呼叫,呼叫unset 撤銷例項或指令碼執行結束時呼叫 3,autoload 第一次引用乙個類時呼叫 例如,呼叫類建構函式,呼叫類的某個靜態方法,等等 4,clon...