仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
Getting two different answers on same input just by different methods of initialization of an array in C++
我正在解决一个DP问题,最长递增子序列,其中我通过两种不同的方法初始化dp数组,并针对相同的输入得到不同的结果。
第一种方法,我得到错误的答案是:int dp[n] = {1};
第二种方法,又是一个错误的答案:int dp[n];
memset(dp, 1, sizeof(dp));
最后,当我使用"for 循环"手动初始化数组时,我得到了正确的答案。
这三种初始化方法有什么区别?
输入:第一行(N,即数组的大小(,下一行:数组元素
83
86 177 115 193 135 186 92 49 21 162 27 90 59 163 126 140 26 172 136 11 168 167 29 182 130 62 123 67 135 129 2 22 58 69 167 193 56 11 427 29 173 21 119 184 137 198 124 115 170 13 126 91 180156 73 62 170 196 81 105 125 84 127 136 105 46 129 113 57 124 95 182 145 14 16734 164 43 150 87 8 76 178
正确输出:15
我对"memset"和直接初始化的回答是 14。使用 for 循环初始化后得到 15
。int dp[n] = {1};
将第一个元素初始化为1
,其余元素初始化为零。
跟
memset(dp, 1, sizeof(dp));
将所有字节设置为1
,这意味着数组中的每个元素都将0x01010101
。
将数组的所有元素设置为特定值的"正确"方法是使用算法函数std::fill
或std::fill_n
。或者使用std::vector
,您可以在其中将默认值传递给每个元素的构造函数。
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 为什么这个scanf()的两个不同的输入会给出两个不同的输出?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- 输入两个不专门化大小的矩阵
- 如果用户输入两个或多个由空格分隔的字符串C++如何防止缓冲区溢出?
- 从文件 (C++) 输入两个单词字符串
- 如何修复密码条目,它一次输入两个字符
- 输入两个数字后程序关闭
- "Pancake glutton"锻炼;如果用户输入两个或多个相等的值该怎么办
- 创建一个程序,要求用户输入两个数字,并有三个可能的答案.代码未编译.数字(作为int)
- 我在使用布尔函数时遇到问题,其中用户输入两个字母并输出字母表中最高的字母
- 将数据输入两个字符串
- 在不使用空格或回车的情况下输入两个数据
- 输入两个整数,并使用预定义函数显示最大数字
- 提示用户输入两个 3x3 int 数组并检查等效性
- 为什么这个程序的结果是三个十进制数"597, 295, 295,"输入两个十六进制数"255 127<enter>"
- 创建一个算法,要求用户输入两个正数,将它们称为 "first" 和 "last" ,并打印第一个正数之间的所有数字的总和
- 在一行中输入两个不同的值