当前位置: 首页 > article >正文

C语言习题~day35

 1. 

 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.

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
  • /*
        方法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

http://www.kler.cn/a/319560.html

相关文章:

  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 1小时构建Vue3知识体系之vue的生命周期函数
  • 轻松上手:使用Docker部署Java服务
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • WebStorm 如何调试 Vue 项目
  • Flink API 的层次结构
  • 产业报告 | 2024年中国机器人产业研究报告
  • 【裸机装机系列】15.kali(ubuntu)-重装linux步骤
  • android 14分屏实战之小米su7的3分屏实现方案讨论及线索征集
  • 智慧城市运营模式--政府和社会资本合作
  • 【Java数据结构】--- 优先级队列
  • fastjson的json字符串转List
  • 移动技术开发:ListView水果列表
  • C++ prime plus-7-編程練習
  • 2024年华为杯中国研究生数学建模竞赛E题(高速公路应急车道紧急启用模型)思路
  • Unity 的Event的Use()方法
  • 《Detection of Tea Leaf Blight in Low-Resolution UAV Remote Sensing Images》论文阅读
  • 海信智能电视的使用心得
  • 量子密码基本原理和必要性
  • 私有大模型、公有大模型介绍及区别
  • 下载分享抖音视频并转成文本
  • python爬虫:从12306网站获取火车站信息
  • 二分查找及变体
  • Linux系统(Ubuntu)(下载篇)
  • [SDX35+WCN6856]SDX35 +WCN6856 remount firmware出现失败问题原因及解决方案
  • 在线海外代理IP科普:代理主机与代理端口号的作用