石家庄定制网站建设,aso优化师主要是干嘛的,什么公司设计网站建设,铜仁北京网站建设本专栏为c语言练习专栏#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新#xff0c;通过每天练习#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字#xff1a;最大连续1的个数 完全数计算 #x1f493;博主csdn个人主页#xff1… 本专栏为c语言练习专栏适合刚刚学完c语言的初学者。本专栏每天会不定时更新通过每天练习进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字最大连续1的个数 完全数计算 博主csdn个人主页小小unicorn ⏩专栏分类C语言天天练 代码仓库小小unicorn的代码仓库 关注我带你学习编程知识 Day1 题目一题目描述解题思路代码实现结果情况 题目二题目描述解题思路代码实现结果情况 总结 题目一
题目描述 给定一个二进制数组 nums 计算其中最大连续 1 的个数。 解题思路 为了得到数组中最大连续 1 的个数需要遍历数组并记录最大的连续 1 的个数和当前的连续 1 的个数。如果当前元素是 1则将当前的连续 1 的个数加 1否则使用之前的连续 1 的个数更新最大的连续 1的个数并将当前的连续 1 的个数清零。 遍历数组结束之后需要再次使用当前的连续 1 的个数更新最大的连续 1 的个数因为数组的最后一个元素可能是 1且最长连续 1 的子数组可能出现在数组的末尾如果遍历数组结束之后不更新最大的连续 1 的个数则会导致结果错误。
代码实现
int findMaxConsecutiveOnes(int* nums, int numsSize)
{int maxCount 0, count 0;for (int i 0; i numsSize; i) {if (nums[i] 1) {count;} else {maxCount fmax(maxCount, count);count 0;}}maxCount fmax(maxCount, count);return maxCount;
}
结果情况 符合题目要求问题得到解决。
题目二
题目描述 完全数Perfect number又称完美数或完备数是一些特殊的自然数。 它所有的真因子即除了自身以外的约数的和即因子函数恰好等于它本身。 例如28它有约数1、2、4、7、14、28除去它本身28外其余5个数相加12471428。 输入n请输出n以内(含n)完全数的个数。 解题思路
我们只需要从1开始把所有可以整除n的约数全部加起来即可
约数就是能够被数字整除而这里简化的一个思路是数字能够被整除则除数和结果就都是约数这种思路下只需 要从1计算到平方根即可为何是平方根看下面即可 比如数字 8 能够整除 2 结果是 4 则除数 2 和结果 4 都是约数而这两个只需要一次计算判断即可。 需要注意的是 4925… 这种除数和结果相同的情况则除数或者结果只相加一次就够了
代码实现
#includestdio.h
#includemath.h
int find(int n)
{int sum 1; //因为i从2开始把1跳过了所以sum等于1加回来int i 0;//这里为何可以开平方根呢? sqrt(n)//因为n被1到n-1之间任一整数整除时两个因子有一个必定小于或等于 根号n// 另一个大于或等于根号n//例如16能被248整除162*82小于48大于4因此只需要判定1到根号n有无因子即可for (i 2; i sqrt(n);i) { //这里i没有等于1是因为题目说除了自身以外的约数if (n % i 0) {//是否为约数sum i;int m n / i;if (i ! sqrt(n)) {//例如93x3这是防止重复的数加进来sum m;}}}if (sum n) {return 1;} else {return 0;}
}
int main()
{int n 0;while (scanf(%d, n) ! EOF) {int i 0;int count 0; //计数for (i 2; i n;i) { //对n以内的数字都进行判断是否是完全数注意1不参与判断//原因是上面sum初始化成1了如果i等于1的话85行代码sumnint pan find(i); //会多返回一次if (pan) {count;}}printf(%d\n, count);}return 0;
}结果情况 符合题目要求问题得到解决。
总结 文章到这里就要告一段落了有更好的想法或问题欢迎评论区留言。 希望今天的练习能对您有所收获咱们下期见