本文记录了两道代码题【自除数】和【除自身以外数组的乘积】(利用了前缀积和后缀积,值得再看),第二部分记录了关于指针数组和逗号表达式的两道选择题。
每日代码
自除数
. - 力扣(LeetCode)
/*** Note: The returned array must be malloced, assume caller calls free().*/
int div_self(int x) {if (x == 0)return 0;int num = x;while (x) {int bit = x % 10;if (bit == 0)return 0;if (num % bit != 0)return 0;x /= 10;}return 1;
}
int* selfDividingNumbers(int left, int right, int* returnSize) {int* returnnums = (int*)malloc(sizeof(int)*(right - left + 1));int pos = 0;for (int i = left; i <= right; i++) {if (div_self(i))returnnums[pos++] = i;}*returnSize = pos;return returnnums;
}
除自身以外数组的乘积
. - 力扣(LeetCode)
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {int *ans = malloc(sizeof(int) * numsSize);*returnSize = numsSize;ans[0] = 1;for (int i = 1; i < numsSize; i++) {ans[i] = ans[i - 1] * nums[i - 1];}int suf = 1;for (int i = numsSize - 1; i >= 0; i--) {ans[i] *= suf;suf *= nums[i];}return ans;
}
利用前缀积和后缀积。(很遗憾,代码是搬来的,只懂了思路,明天一定要亲自运行出来!)
C语言碎片知识
下列程序的输出是( )
#include<stdio.h> int main() {int a [12]= {1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;for(i=0;i<4;i++)p[i]=&a [i*3];printf("%d\n",p[3][2]);return 0; }
A: 上述程序有错误 B: 6 C: 8 D: 12
答案:D
p是一个指针数组!数组里存放的是指针,分别存放了a[0],a[3],a[6],a[9]的地址。类似于一个四行三列的数组。
以下逗号表达式的值为( )
(x= 4 * 5 , x * 5) , x + 5;
A: 25 B: 20 C: 100 D: 45
答案:A
逗号表达式从前往后计算,结果为最后一项的值,题目等价于x=20,20*5,20+5。x*5时也并没有改变x的值。
-The End-