收集的一些題or結論

2021-06-18 00:55:29 字數 3060 閱讀 1960

兩條單鏈表如果交叉的話不可能一條有環一條沒有環。

已知有個rand7()的函式,返回1到7隨機自然數,讓利用這個rand7()構造rand10() 隨機1~10

(rand7()-1)*7得到乙個離散整數集合a=,其中每個整數的出現概率也都是1/7。而rand7()得到的集合b=中每個整數出現的概率也是1/7。顯然集合a和b中任何兩個元素組合可以與1-49之間的乙個整數.去除41到49的數剩下的還是隨機分布的數。生成的數對10取模+1就可以隨機產生1~10

js與c++的區別之處

#include using std::cin;

using std::cout;

int i = 0;

void print()

; longestascseq(a,sizeof(a)/sizeof(int));

}void longestascseq(int a,int n)

} } }

printsequence(c,a,lastindex);

cout《給乙個浮點數序列,取最大乘積連續子串的值,例如 -2.5,4,0,3,0.5,8,-1,則取出的最大乘積連續子串為3,0.5,8。也就是說,上述陣列中,3 0.5 8這3個數的乘積3*0.5*8=12是最大的,而且是連續的。

注意子串和子串行的區別,子串是連續的,子串行不要求連續

1 我能想到的,就是類似於最大子串和的解法,三層迴圈or兩層迴圈遍歷

2 ** 這裡的問題是人為設定了乙個空集的乘積為1,1為邊界類似於求最大連續和字串中的0,任何數乘以小於1的數模值都會變小,但最大連續和字串中的0還是有意義的表示乙個都不取,但這裡的1.。。實在有點牽強。

變體:此外,此題還有另外的乙個變種形式,即給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意(n-1)個數的組合中乘積最大的一組,並寫出演算法的時間複雜度。

動態規劃求最小連續乘積

鍊錶相鄰元素翻轉,如a->b->c->d->e->f-g,翻轉後變為:b->a->d->c->f->e->g

#include using namespace std;

/* 刪除字串開始及末尾的空白符,

把陣列中間的多個空格符轉化為1個

演算法和乙個字串中刪除指定集合的字元類似,

兩指標一指向位置一遍歷字串,o(n)複雜度

*/void deleteblank(char *str)

else if(*q==' '&&needed)

}//這裡最後乙個如果是空格的話也會留下來

if(p==str)//所有都是空格

else

// 列印

int i =0;

for(p=str;*p!='\0';p++)

i++;

cout<

鍊錶轉殖。鍊錶的結構為: 

typedef struct list list;

kmp演算法

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次;乙個陣列裡,除了三個數是唯一出現的,其餘的都出現偶數個,找出這三個數中的任乙個;

#include using namespace std;

/* 找出陣列中唯一兩個只出現一次的數字

所有異或運算然後結果從頭開始移位找到第乙個最右邊的1

然後按照這位1將陣列分成兩組,這兩組數字分別進行異或就是結果

*//*

實際上這種可以設計合適的hash函式or排序二叉樹實現

*/void find(int ,int);

int main()

; find(a,sizeof(a)/sizeof(int));

cin.get();

}void find(int a,int n)

; find(a,sizeof(a)/sizeof(int));

cin.get();

} void find(int a,int n)

; int b = [3,4,6,6,8,10,10];

歸併成 a = ;

b =

演算法思路是:

先找a中比b[0]小的數到第乙個大於停止,標記為i,此時i指向5

然後找b中比5小的數到第乙個大於為止,標記為j,此時j指向6

然後將5,7,9,3,4看成乙個整體,使用左旋字串的方法旋轉成3 4 5 7 9

此時a中為1 2 3 4 5,b中為7,9,6,6,8,10,10,則開始起始點i

為5(原始位置+移過來兩元素),j為原始的地方6,繼續上訴過程

*//*

a、b 要旋轉的陣列

n a的長度

start 左旋串的起始位置

end 左旋串的終點位置

num 左旋的起始位置

*/ void rotateleft(int *a,int n,int *b,int start,int end,int num);

/* 兩個陣列起始位址和長度

*/ void merge(int*,int,int*,int);

int main()

; int b = ;

merge(a,sizeof(a)/sizeof(int),b,sizeof(b)/sizeof(int));

for(int i=0;in-1)

else if(i>n-1)

}for(int i=end-num+1,j=end;in-1)

else if(i>n-1)

}for(int i=start,j=end;in-1)

else if(i>n-1)

}}void merge(int a,int n,int b,int m)

while(j=b[j-n])||(i=n&&b[j-n]<=b[i-n])))

if(i>=j)

break;

else

}

}

當用到計數器的時候一定要注意計數器的清空!!!!!!!!

收集的一些題or結論2

include using namespace std 已知字串裡的字元是互不相同的,按照字典序輸出所有的組合,比如ab輸出aa,ab,ba,bb。思路 1 要字典序,所以要首先對陣列排序 氣泡排序的第一層迴圈只是用來控制做多少次的,和第二層迴圈基本沒聯絡 2 乙個完整的輸出 填入乙個字元 填入剩下...

一些刷題過程中的結論

uva 10313 整數i拆分成不超過j個整數的拆分方案數,是和整數i拆成若干個值不超過j的整數的拆分方案數是相同的 原理 ferrers影象 詳 關於c 引用帶的的不易發現的錯誤。來自於乙個4維dp。uva 10913 例如int res dp i j p q 如果在這個記憶化搜尋子過程中需要更新...

博弈論的一些結論

感謝 自從昨天考了博弈論的一道程式填空題,博弈論的陰雲便一直在我的心上徘徊,今天把這個坑填一下。一.巴什博弈 bash game a和b一塊報數,每人每次最少報乙個,最多報四個,看誰先報到三十.這應該是最古老的關於巴什博弈的遊戲了吧。其實如果知道原理,這遊戲一點運氣成分都沒有,只和先後手有關,比如第...