C语言习题~day35

1.

cpp 复制代码
 int f(int x){ 
    return ((x>2) ? x*f(x-1) : 3); 
} 
int i; 
i=f(f(2))

执行如上函数后. i的值为()

A.30

B.无限递归

C.9

D.2160

先计算内层的f(2),因为 2 不大于 2,所以返回 3,即f(2)=3。

然后计算f(f(2))=f(3),对于f(3),因为 3 大于 2,所以返回3*f(2),即3*3=9,所以最终i=9。

2.

cpp 复制代码
int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}}

p[1][2]的值是()

A.1

B. 0

C.6

D.2

数组 p 中第二行实际存储的是 {3, 2, 0, 0} (因为每行都要填满 4 个元素,不足的用 0 补齐),所以 p[1][2] 的值是 0。

3.

给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于 val的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k
cpp 复制代码
/*
    方法1
    解题思路:
        1. 从前往后遍历nums,找到val第一次出现的位置
        2. 将val之后的所有元素整体往前搬移,即删除该val
        3. nums中有效元素个数减少一个
    循环进行上述操作,直到nums中所有值为val的元素全部删除完
    时间复杂度:O(N^2)  空间复杂度:O(1)
*/
#if 0
int removeElement(int* nums, int numsSize, int val){
    // 
    while(1)
    {
        // 1. 在nums中找val出现的位置
        int pos = 0;
        for(; pos < numsSize; ++pos)
        {
            if(nums[pos] == val)
            {
                break;
            }
        }


        // 2. 检测是否找到
        if(pos == numsSize)
            break;


        // 3. 找到值为value的元素--将其删除
        for(int j = pos+1; j < numsSize; ++j)
        {
            nums[j-1] = nums[j];
        }


        numsSize--;
    }


    return numsSize;
}
#endif



#if 0
/*
    方法2:
    解题思路: 
        1. 创建一个长度与nums相同的数组temp
        2. 遍历nums,将nums中所有与val不同的元素搬移到temp中
        3. 将temp中所有元素拷贝回nums中
       时间复杂度: O(N)  空间复杂度: O(N)
*/
int removeElement(int* nums, int numsSize, int val){
    // 1. 申请numSize个元素的新空间
    int* temp = (int*)malloc(sizeof(int)*numsSize);
    if(NULL == temp)
    {
        return 0;
    }


    // 2. 将nums中非value的元素搬移到temp中---尾插到temp中
    int count = 0;
    for(int i = 0; i < numsSize; ++i)
    {
        if(nums[i] != val)
        {
            temp[count] = nums[i];
            ++count;
        }
    }


    // 3. 将temp中删除val之后的所有元素拷贝到nums中
    memcpy(nums, temp, sizeof(int)*count);
    free(temp);
    return count;
}
#endif
相关推荐
万象.4 分钟前
redis通用命令与数据结构
数据结构·数据库·redis
凌乱风雨12118 分钟前
从源码角度解析C++20新特性如何简化线程超时取消
前端·算法·c++20
Jim-2ha016 分钟前
【平面几何】判断一个点是否在任意多边形的内部
算法
小宇的天下16 分钟前
Calibre : 一个简单的DRC rule file
数据结构
橘颂TA17 分钟前
【剑斩OFFER】算法的暴力美学——合并 k 个升序链表
算法·leetcode·牛客·结构与算法
前端小L18 分钟前
双指针专题(五):灵活的起跳——「无重复字符的最长子串」
javascript·算法·双指针与滑动窗口
C雨后彩虹24 分钟前
ReentrantLock入门:核心特性与基本使用
java·数据结构·reentrantlock·lock
爪哇部落算法小助手24 分钟前
每日两题day67
c++·算法
hk112425 分钟前
【BioTech/SystemArch】2026年度高可靠性医疗架构与生物遗传算法基准索引 (Benchmark Index)
算法·系统架构·数据集·生物信息学·垃圾回收
你撅嘴真丑28 分钟前
短信计费 和 甲流病人初筛
数据结构·c++·算法