母牛的故事 替换空格 二进制中1的个数 不使用第三个变量交换a,b的值

简介: 母牛的故事 替换空格 二进制中1的个数 不使用第三个变量交换a,b的值

1.母牛的故事


题目链接:传送门


有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?


输入描述:
输入数据由多个测试实例组成,每个测试实例占一行,
包括一个整数n(0<n<55),n的含义如题目中描述。


输出描述:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。


解题思路:


因为前四年都是由一头成年牛生产小牛牛,所以前四年的数量分别是

{1,2,3,4,},从第5年开始则不同,因为第2年生产的小牛牛已经长大了,也可以生产了。


我们以第五年为例:


第5年牛牛数量=原来牛的数量+新增牛的数量


原来牛的数量:指上一年的数量,即第四年牛牛的数量。


新增牛的数量:第五年有哪些牛出生就是新增牛的数量,显然此时第2年牛的数量就为新增牛的数量,因为到第五年的时候第2年所有的牛都是成年牛了,所以都可以生小牛。


第n年牛牛的数量为=原来牛的数量(n-1年)+新增牛的数量(n-3年)


重点:很多小伙伴还是不理解为什么是n-3年,


因为


第一年: n-3题目看仔细哦,小牛是年初出生的,所以到n-3年结束,这里也是一年哦。


第二年 :n-2


第三年 :n-1


第四年 : n(年初生产了)


代码实现:

#include <stdio.h>
#define N 55
int main()
{
  //定义一个一维数组,用于存放每一年牛的数量
  int a[N] = {0,1,2,3,4};
  int i = 0, n = 0;
  while (scanf("%d", &n) != EOF)//用于多组输入
  {
    for (i = 5; i <= n; i++)//从第五年开始,有小牛出生
    {
      //去年牛的数量+新出生的小牛的数量
      a[i] = a[i - 1] + a[i- 3];
    }
    printf("%d\n", a[n]);//输出这一年牛的数量
  }
  return 0;
}


最后:如有不了解多组输入的小伙伴。


请参照:scanf(“%d”, &n) != EOF,


2.替换空格


题目链接:传送门


描述:


请实现一个函数,将一个字符串s中的每个空格替换成“%20”。


例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。


数据范围:1000 \0≤len(s)≤1000 。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。


示例1
输入:
"We Are Happy"
复制
返回值:
"We%20Are%20Happy"
复制
示例2
输入:
" "
复制
返回值:
"%20"


解题思路:


  1. 首先,我们观察到返回值是一串字符,所以我们可以创建一个足够大的数组来存储返回字符串.


  1. 其次题目要求是将目标字符串中的“空格”替换为“%20”,这里特别注意的是“%20“是三个字符(‘%’,‘2’,‘0’组成).所以我们不能直接将"空格"赋值为”%20”.


  1. 我们遍历目标字符数组(字符串)时,遇到空格,就将空格和空格后的两个字符都占据,这样就可以有三个字符空间来分别存储’%’ ‘2’ ‘0’.了


  1. 最后将返回值字符串返回即可.


代码实现


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param s string字符串
 * @return string字符串
 */
char* replaceSpace(char* s ) {
    // write code here
    char ret[10000]={0};//创建一个用于存放返回字符串的数组
    int i=0;
   for(i=0;*s!='\0';i++)
    {
        if(*s==' ')//如果遇到空格,就用三个字符来存储%20
        {
           ret[i]='%';
           ret[i+1]='2';
           ret[i+2]='0';
           i=i+2;
        }
        else{
            ret[i]=*s;//不是空格则直接存储
        }
        s++;
    }
    return ret;
}


3.二进制中1的个数(操作符之小试牛刀)


题目链接:传送门


题目描述:


输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。


数据范围:- 2^{31} <= n <= 2^{31}-1−2


即范围为:-2147483648<= n <= 2147483647−2147483648<=n<=2147483647


示例1
输入:
10
复制
返回值:
2
复制
说明:
十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010
,其中有两个1。       
示例2
输入:
-1
复制
返回值:
32
复制
说明:
负数使用补码表示 ,-1的32位二进制表示为
1111 1111 1111 1111 1111 1111 1111 1111,其中32个1    


解题思路


方法1:


当一个数n&1的时候,我们就可以得到n这个数的最低位.是否为1,为1则会返回1,反之返回0.

例如:



我们可以用">>"(逻辑右移操作符)每次移动一位后&1,判断最后一位是否为1.


方法2:


这个方法很巧妙,其实当我们用n&n-1的时候,每次都会减少二进制中的一个1.直到n为0;


例如:53


第一次相&



第二次相&



第三次相&



第四次相&



代码实现


//方法1
int NumberOf1(int n ) {
int count=0,i=0;
    for (i = 0; i < 32; i++)
  {
    if (1 == ((n >> i) & 1))//每次移动i个位置
    {
      count++;
    }
  }
  return count;
}


//方法2
int NumberOf1(int n ) {
    int count = 0;
  while (n)
  {
    n&=(n - 1);
    count++;
  }
  return count;
}


新增题:


4.经典面试题(操作符之小试牛刀)


题目描述:


已定义int a=3,b=5;在不使用第三个变得的情况下交换a与b的值.


输出:a=5,b=3;


方法一:


#include <stdio.h>
int main()
{
  int a = 3, b = 5;
  a = a + b;
  b = a - b;//此时a=a+b
  a = a - b;//此时b=a;
  printf("a=%d,b=%d", a, b);
  return 0;
}


方法2:


#include <stdio.h>
int main()
{
  int a = 3, b = 5;
  a = a ^ b;
  b = a ^ b;//此时a=a^b
  a = a ^ b;//此时b=a
  printf("a=%d,b=%d", a, b);
  return 0;
}


方法一的思路看代码相信大家都可以看懂,方法2,就有点迷糊了,其实通过看二进制的位的变化才可以看懂,但是这谁能想的到啊,牛牛也想不到,但是想不到的东西多了去了,我学会就是我的.😄😄😄


提示:


n^n=0;

目录
相关文章
|
1月前
|
人工智能 自然语言处理 监控
阿里云百炼AI模型指南:免费领千万Tokens,百炼Token Plan和Coding Plan订阅计划费用说明
阿里云百炼是一站式AI大模型服务平台,支持Qwen、DeepSeek、Kimi等主流模型。新用户免费领超7000万Tokens(每模型100万),并提供Token Plan(39元起/月)和Coding Plan(200元/月)订阅服务,助力高效、低成本使用AI能力。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
240 0
|
2月前
|
存储 人工智能 监控
阿里云免费Tokens领取指南:开通百炼,自动领取超7000万Tokens(每个模型100万Token)
阿里云百炼平台为新用户自动发放超7000万免费Tokens(每模型100万),限华北2(北京)地域,有效期90天。支持在控制台查询余量、开启“用完即停”防扣费,并涵盖额度共享、适用范围及常见问题详解。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
2月前
|
消息中间件 弹性计算 运维
从 0 到 1 搭建小程序平台:服务器选型、架构设计与资金结算方案实战
本文详解本地生活小程序从0到1全栈搭建实战,聚焦高并发、资金合规等核心痛点。基于阿里云生态,采用Spring Boot+RDS+Redis+RocketMQ+OSS+ACK技术栈,结合分账链实现安全分润,并对比ECS/FC/轻量服务器选型逻辑,提供可复用的工程化落地方案。(239字)
287 1
|
3月前
|
人工智能 定位技术 API
高德汽车业务 AI Native 工程实践|基于 Qoder 的业务知识工程建设实践
高德企业业务通过 Qoder 知识引擎构建业务知识的"生产—调优—更新—消费"体系,同一类错误不再发生第二次,任务一次性通过率从 37.3% 提升至 61.5%。
463 0
高德汽车业务 AI Native 工程实践|基于 Qoder 的业务知识工程建设实践
|
2月前
|
人工智能 测试技术 API
25万 Star 的 Superpowers,为什么要求 AI 写代码前先写测试?
Superpowers 是一个超26.5万星的AI编程增强项目,不追求“写更多代码”,而是为Claude、Cursor等Coding Agent强制植入TDD、系统化调试、代码审查与验证闭环等工程纪律。它直击AI Coding核心瓶颈:代码易产,证正确难——真正昂贵的,是证明代码对的证据。
|
5月前
|
缓存 人工智能 运维
阿里云百炼Qwen3.7-Max全解:旗舰模型核心能力、技术优势与优惠订阅方案实操指南
AI智能体技术进入规模化落地阶段后,市场对大模型的长文本承载、多步骤自主推理、工具链式调用、全栈代码开发能力提出前所未有的高标准。传统轻量化对话模型仅能满足基础问答,无法支撑企业级长周期自动化任务、复杂软件工程、海量文档深度分析等高价值场景。阿里云依托自研通义千问技术体系,在百炼大模型服务平台正式推出Qwen3.7-Max旗舰大模型,作为当前千问3.7系列综合性能天花板,全面对标国际头部闭源旗舰模型,专为智能体全链路工作流深度优化,兼顾推理精度、并发稳定性、多模态理解与成本可控性,同时配套分层订阅优惠计划,覆盖个人开发者、小微团队、中大型集团企业全维度使用需求。本文将完整拆解Qwen3.7-M
643 1
|
7月前
|
弹性计算 Cloud Native Java
【技术实战】上传源码自动生成毕设论文?一位阿里云开发者的效率工具测评与架构解析
计算机毕业设计季,如何将代码工程高效转化为规范学术论文?本文从开发者视角实测「智码方舟」代码转论文工具,解析其基于AST+LLM的代码语义分析架构,演示Spring Boot+Vue项目30分钟生成1.2万字论文初稿的完整流程,并结合阿里云ECS/RDS提供一键部署方案。工具仅辅助提效,核心逻辑需本人完善,合规使用是关键。
|
7月前
|
弹性计算 监控 负载均衡
技术实践:使用阿里云ECS部署高可用Web应用架构
本文为阿里云云大使撰写的实战指南,详解如何用阿里云ECS搭建高可用电商应用:涵盖架构设计、环境部署、负载均衡、成本优化(月省27%)及故障处理。含完整脚本与性能数据,助力开发者高效上云。新用户通过链接享专属优惠👉https://www.aliyun.com/benefit?userCode=iakscw7s
713 13
|
存储 固态存储 算法
固态硬盘损坏后还能做数据恢复吗?完整指南
固态硬盘(SSD)因速度快、抗震动、低噪音被广泛使用,但一旦损坏,用户常因慌乱导致二次损失。本文解析SSD损坏后的数据恢复可行性,介绍逻辑损坏、固件异常、物理损坏三种常见情况,并提供对应的恢复方法与预防措施,帮助用户科学应对数据丢失风险,提升恢复成功率。
|
算法 数据安全/隐私保护 异构计算
基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率
本项目基于Vivado2019.2实现信号发生器,可输出方波、脉冲波、m随机序列和正弦波。完整程序无水印,含详细中文注释与操作视频。FPGA技术使信号发生器精度高、稳定性强、功能多样,适用于电子工程、通信等领域。方波、脉冲波、m序列及正弦波的生成原理分别介绍,代码核心部分展示。