增加網址:
文章備註、標題(會記錄下來,但是暫時不會顯示):
[綜合]無題 無名 ID:SUNpKCTg 17/09/08(五)20:38:33 No.9814606
評分:0, 年:0, 月:0, 週:0, 日:0, [+1 / -1] 最後更新:2017-09-08 08:52:49
附圖
http://rem.komica2.net/00/pixmicat.php?res=9811416
//------
[aa]
function rotationLeft(SourceArray,LeftMove){
var aryInt = SourceArray;
var intLength = aryInt.length;
var intMaxPoint = intLength - 1;
var intMove = LeftMove % intLength;
var intFirstChangePoint = 0;
//--------
var intIndex = 0;
//--
var intChangeTo = (intIndex+intMove);
do{
if(intFirstChangePoint == intIndex){
intFirstChangePoint = (intIndex+intMove);
}
Change(aryInt,intIndex,(intIndex+intMove));
intChangeTo++;
intIndex++;
}
while(intChangeTo < intLength);
//--
var intPointFixFisrt = intIndex;
var intPoint = 0+intFirstChangePoint;
do{
if(intPointFixFisrt == intIndex){
intPointFixFisrt = intPoint;
}
Change(aryInt,intIndex,intPoint);
if(intPoint == intMaxPoint){
intPoint = intPointFixFisrt;
}
else{
intPoint++;
}
intIndex++
}while(intIndex < intMaxPoint);
}

[/aa]
無題 無名 ID:SUNpKCTg 17/09/08(五)20:40:04 No.9814620
附圖
下班吃過晚餐後,整理一下回家前PO出的程式碼。
基本上因為懶得開新專案,就用JS直接寫了
[aa]

function Change(SourceArray,PointFrom,PointTo){
var temp = SourceArray[PointFrom];
SourceArray[PointFrom] = SourceArray[PointTo];
SourceArray[PointTo] = temp;
}
[/aa]
無題 無名 ID:gmLgFMY6 17/09/08(五)20:40:35 No.9814623
為...為什麼便這麼長....
無題 無名 ID:SUNpKCTg 17/09/08(五)20:41:03 No.9814627
附圖
接著這段是驗證的部分。

[aa]
function CheckMoveResult(arraySource, arrayCompare,intMove){
var result = true;
for(var index = 0 ; index < arraySource.length ; index++){
var intComparePoint = (index+intMove) % arraySource.length;
if(arraySource[intComparePoint] !== arrayCompare[index]){
result = false;
}
}
return result;
}
function BuildArray(size){
var result = [];
for(var index = 0 ; index < size ; index++){
result[index] = index+1;
}
return result;
}
for(var intArraySize = 1 ;intArraySize<100 ; intArraySize++){
var arrayError = [];
var arraySource = BuildArray(intArraySize);
var isOk = true;
for(var intMove = 1;intMove < arraySource.length ; intMove++){
var arrayInt = arraySource.slice();
rotationLeft(arrayInt,intMove);
isOk = isOk & CheckMoveResult(arraySource,arrayInt,intMove);
if(isOk == false){
arrayError.push(intMove);
}

}

if(isOk == false){
console.log("error size",intArraySize,"error move:",arrayError);
}
else{
console.log("size",intArraySize,"OK");
}
}
console.log("done");

[/aa]
無題 無名 ID:SUNpKCTg 17/09/08(五)20:44:05 No.9814656
附圖
總體跑起來的話,每次位移的總共迴圈處理次數是N-1。

至於為什麼變得那麼長?
因為這樣才豪丸阿!!!!!
無題 無名 ID:SUNpKCTg 17/09/08(五)20:46:52 No.9814677
附圖
然後補一下運行狀況
無題 無名 ID:SUNpKCTg 17/09/08(五)20:52:23 No.9814722
附圖
接著就是嗆人的部分了。

調整用不夠丸的寫法,跑出來根本就是炸的。

這只說明一件事情,就是你還不夠會丸!!
無題 無名 ID:SUNpKCTg 17/09/08(五)20:55:31 No.9814747
附圖
總之,我要說的事情其實很簡單,就是...
....
....
丸,乃丸,粗乃丸!!!!!
無題 無名 ID:dtUFoDPM 17/09/08(五)20:58:07 No.9814767
http://cpp.sh/9w7c

好久沒寫c++

這應該是bigO(n)沒錯吧
無題 無名 ID:BpHst6kw 17/09/08(五)21:03:28 No.9814809
戰力...有點弱
無題 無名 ID:SUNpKCTg 17/09/08(五)21:03:33 No.9814811
回覆: >>9814859
附圖
>>9814767
記憶體-w-
無題 無名 ID:HXkeQ9EM 17/09/08(五)21:05:49 No.9814833
回覆: >>9814859
>>9814767
...
這樣寫有點危險吧
無題 無名 ID:dtUFoDPM 17/09/08(五)21:08:14 No.9814859
>>9814811
>>9814833
硬幹阿
就是要快
無題 無名 ID:HDCDWxlc 17/09/08(五)21:09:06 No.9814865
回覆: >>9814883
三小啦
這個不是簡單到爆炸嗎
有需要開到兩串?

>>9814767
如果我是教授我現在馬上把你當掉
無題 無名 ID:SUNpKCTg 17/09/08(五)21:10:43 No.9814876
附圖
>>9814767
重點是文不對題-w-

要被當掉惹
無題 無名 ID:SUNpKCTg 17/09/08(五)21:11:19 No.9814883
附圖
>>9814865
因為前串沉了,這樣就不能丸惹
無題 無名 ID:zEyDHDB. 17/09/08(五)21:11:26 No.9814884
>>9814767
真是太聰明了,無限外擴之術
無題 無名 ID:HXkeQ9EM 17/09/08(五)21:21:35 No.9814979
http://cpp.sh/86sb
無題 無名 ID:dtUFoDPM 17/09/08(五)21:25:23 No.9815005
c++就是好
怎麼亂搞都可以
哪像一些現代的腳本語言
稍微調戲一下就噴Exception
所以我開發都不用c++
無題 無名 ID:gmLgFMY6 17/09/08(五)21:31:55 No.9815057
>>9814979

最佳解出現了
無題 無名 ID:M39EOVT. 17/09/08(五)21:33:04 No.9815064
附圖
無本文
無題 無名 ID:HDCDWxlc 17/09/08(五)21:33:09 No.9815065
回覆: >>9815843
應該對吧
沒有編譯測試過
[aa]
int getGCD(int a,int b)
{
if(a%b==0)
return b;
return getGCD(b,a%b);
}

void leftRotate(int *arr,int arrLength,int rotateLength)
{
rotateLength%=arrLength;
if(rotateLength<0)
rotateLength+=arrLength;
if(rotateLength==0)
return;

int gcd=getGCD(arrLength,rotateLength);
for(int begin=0;begin<gcd;begin++)
{
int now=begin
int next=now+rotateLength;
int temp=arr[now];
while(next!=begin)
{
arr[now]=arr[next];
now=next;
next=(next+rotateLength)%arrLength;
}
arr[now]=temp;
}
}
[/aa]

>>9814979
你戰勝了真理
無題 無名 ID:Od.rc76k 17/09/08(五)21:39:44 No.9815115
回覆: >>9815735
粗乃丸果然是智障
無題 無名 ID:SUNpKCTg 17/09/08(五)22:43:07 No.9815679
附圖
>>9814979
問題是你後續如何運用,Print只是作為驗證用的阿
無題 無名 ID:HDCDWxlc 17/09/08(五)22:53:02 No.9815731
回覆: >>9815800
>>9815679
如果你把陣列弄成一個物件並且封裝化
那就沒有問題
無題 無名 ID:gck3L6JE 17/09/08(五)22:53:40 No.9815735
附圖
>>9815115
泥縮蛇摸!
無題 無名 ID:SUNpKCTg 17/09/08(五)23:03:02 No.9815800
附圖
>>9815731
然後空間複雜度就炸掉了
無題 無名 ID:SUNpKCTg 17/09/08(五)23:08:07 No.9815843
附圖
>>9815065
有些小瑕疵,修正後運行正常。
無題 無名 ID:HXkeQ9EM 17/09/08(五)23:12:43 No.9815873
回覆: >>9816026
>>9815679
一個很簡單的解決方法
你新增一個左移變數來紀錄上次的左移量

下次左移時只要加上"上次的左移量",就可以印出正確的左移量

這是我開始工作後的一點心得
東西在需要的時候出現就好
無題 無名 ID:SUNpKCTg 17/09/08(五)23:34:10 No.9816026
附圖
>>9815873
所以就是要客製化物件了。

那就要看原始題目對於這個到底算不算符合規格。