使用memset函式的小問題
最近在符習演算法的知識,今天作杭電oj的1114題,乙個揹包問題。
最後要求的是可能的硬幣的最小值,所以先把揹包初始化成乙個自定義的極大值inf再進行計算,開始寫的程式如下:
#include
#include
#include
using namespace std;
#define inf 990000
int
main()
for(
int i=
0;i)for
(int j=weight[i]
;j<=v;j++
) bag[j]
=min
(bag[j]
,bag[j-weight[i]
]+price[i]);
if(bag[v]
==inf)
cout<<
"this is impossible."
cout<<
"the minimum amount of money in the piggy-bank is "
<<<
"."<}return0;
}
結果發現所有樣例的結果都是impossible,看了該題discuss,發現ac大佬這一句
if
(bag[v]
==inf)
寫的是這樣
if
(bag[v]
==bag[
10008
])
改了之後果然對了,於是乎我直接輸出了bag[10008],結果並不是想象中的inf值,而是乙個奇奇怪怪的值808464432。
這就很有意思了,輸出memset後的值居然不是初始化的值?難道是因為陣列太大了,在計算過程中有什麼玄學錯誤?
於是我又寫了幾個簡單的程式測試了一下,發現不管陣列大小,直接輸出memset初始化後的陣列的任意乙個值,都是乙個奇奇怪怪的數而非我們設定的值。
具體原因應該與memset的實現方式有關,這裡先記錄下來,以後有空好好研究一下。
發現乙個很有意思的C語言指標小知識
先貼 給你們湊乎湊乎 include include include void test for i 0 i n i p i i for i 0 i n i printf d n p i free p getch void test1 int n,i int p p a for i 0 i 5 i ...
乙個memset函式使用時的坑
平時使用memset函式都是用來初始化字串,從來沒有注意過它具體是怎麼實現的,最近無意中發現原來這個函式裡面還是有坑的。我嘗試用它來初始化整型陣列 int array 10 memset array,1,sizeof a 我原本是想將陣列元素全部初始化為1,可是卻是這樣的 一開始不明白為什麼會這樣,...
乙個小發現
最近在看一些筆試題目,比如說諸如 例一 解答 變換一次就成為為1的只有 2 2 2 變換兩次就成為1的也只有乙個4 4 2 2 2 變換三次就成為1的有兩個數 3 3 1,4 2,2 2 和 8 8 2,4 2,2 2 變換四次就成為1的有三個數6 7 和16 就不一一列了 所以發現這是乙個fib數...