弯道超车必做好题集锦三(C语言编程题)

news2025/3/10 23:07:38

目录

前言:

1.单词倒排 

 方法1:scanf匹配特定字符法

方法2: 双指针法

2.统计每个月兔子的总数

 方法1:斐波那契数列

方法2:斐波那契的递归

3.珠玑妙算

方法:遍历

 4.寻找奇数(单身狗)

方法1:遍历法

 方法2:异或运算法

5.截取字符串


前言:

编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,此为第三篇编程题篇,每篇大约5题左右。该系列会不定期更新,敬请期待!


1.单词倒排 

 方法1:scanf匹配特定字符法

#include <stdio.h>
int main()
{
    char str[1000][1000];
    int i = 0;
    while (1)
    {
        if (scanf("%[a-zA-Z]", str[i]))
        {
            i++;
        }
        if (getchar() == '\n')
        {
            break;
        }
    }
    while(i)
    {
        printf("%s ", str[--i]);
    }
    return 0;
}

 解析:

方法2: 双指针法

解题思路:

  1. 整体思想是双指针法,因此定义一对快慢指针p1,p2.
  2. 首先寻找一个单词的末尾,因此当s[p1]不是字母时p1就要--,循环终止时只要p1将指向一个单词的末尾(还有单词的话),此时将用p2记录下这个单词的结尾。
  3. 继续寻找单词的开头,因此当s[p1]为字母的时候就让p1--,最终p1+1指向该单词的开头,我们从p1+1遍历到p2,依次打印即可。

 scanf函数不能接受带空格的字符串,所以要使用gets函数

#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
	char s[10000];
	gets(s);
	int len = strlen(s);
	int p1 = len - 1, p2 = len;
	while (p1>=0)
	{
		while (p1 >= 0 && !isalpha(s[p1]))
		{
			p1--;
		}		
		p2 = p1;
		while (p1 >= 0 && isalpha(s[p1]))
		{
			p1--;
		}			
		int i;
		for (i = p1 + 1; i <= p2; i++)
		{
			printf("%c", s[i]);
		}			
		printf(" ");
	}
	return 0;
}

2.统计每个月兔子的总数

 方法1:斐波那契数列

我们可以先来推导一下

第一个月 只有一只

第二个月 只有一只

第三个月 原先的一只生出一只共2只

第四个月 最开始的一只又生出一只 共3只

第五个月 第一只生一只,第二只到第三月 生一只,共5只

第六个月 第一只生一只,第二只生一只,第三只生一只,共8只

1  1   2   3  5  8……

可以发现f(n) = f(n-1)+f(n-2)

本质上是斐波那契数列

#include<stdio.h>
int main()
{
	int arr[31],i = 0,n;
	arr[0] = 1; arr[1] = 1;
	scanf("%d", &n);
	for (i = 2; i < n; i++)
	{
		arr[i] = arr[i - 1] + arr[i - 2];
	}
	printf("%d", arr[n - 1]);
	return 0;
}

方法2:斐波那契的递归

#include<stdio.h>
int fb(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	return fb(n - 1) + fb(n - 2);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", fb(n));
	return 0;
}

3.珠玑妙算

珠玑妙算icon-default.png?t=N7T8https://leetcode.cn/problems/master-mind-lcci/

方法:遍历

int* masterMind(char* solution, char* guess, int* returnSize) {
	int* ret = (int*)malloc(sizeof(int) * 2);
	ret[0] = 0; ret[1] = 0;
	int i = 0,j=0;
	for (i = 0; i < 4; i++)
	{
		if (solution[i] == guess[i])
		{
			ret[0]++;
			solution[i] = ' ';
			guess[i] = ' ';
	    }
	}
	for (i = 0; i < 4; i++)
	{
		if (solution[i]!=' ')
		{
			for (j = 0; j < 4; j++)
			{
				if (solution[i] == guess[j])
				{
					ret[1]++;
					guess[j] = ' ';
					break;
			     }
			}
		}
	}
	*returnSize = 2;
	return ret;
}

解析:

solution: RGBY

guess: GGRR

先遍历一遍guess,每个字符一一对应

R-G         G-G         B-R        Y-R

我们把相同的当成一次猜中,即G==G,即为一次,并把这两个字符抵消 

然后我们再次遍历guess中的每一位,这时候我们需要在整个solution中搜索是否有这个字符,如果有则抵消solution和guess中的字符,并当成一次伪猜中,然后下一个字符照旧


 4.寻找奇数(单身狗)

方法1:遍历法

#include<stdio.h>
int main()
{
    int n = 0, arr[2000000],i=0,count=0,j=0,flg=0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (i = 0; i < n-1; i++)
    {
        if (arr[i] < 0)
        {
            continue;
        }
        count = 1;
        for (j = i+1; j < n; j++)
        {
             
            if (arr[j]>0 && arr[i] == arr[j])
            {
                arr[j] = arr[j] * -1;
                count++;
            }
        }
        if (count % 2 != 0)
        {
            flg = arr[i];
            break;
        }
         
    }
    printf("%d",flg);
    return 0;
}

 但会超时 

 方法2:异或运算法

总结:利用异或运算可以算出出现奇数次的数字 

#include<stdio.h>
int main()
{
    int n = 0;
    int ans = 0;
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
        int tmp = 0;
        scanf("%d",&tmp);
        ans ^= tmp;
    }
    printf("%d\n", ans);
    return 0;
}

5.截取字符串

解析:

截取字符串前 n 个字符,只需要将数组 n 下标位置的数据替换为字符串结尾标志即可
#include <stdio.h>
int main()
{
char str[101];
scanf("%s", str) > 0;
int n;
scanf("%d", &n);
str[n] = '\0';
printf("%s\n", str);
return 0;
}


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图解算法数据结构】分治算法篇 + Java代码实现

文章目录 一、重建二叉树二、数值的整数次方三、打印从 1 到最大的 n 位数四、二叉搜索树的后序遍历序列五、数组中的逆序对 一、重建二叉树 public class Solution {int[] preorder;HashMap<Integer, Integer> dic new HashMap<>();public TreeNode buildTree(in…

可视化流程设计平台有啥优势?

在流程化办公发展趋势逐渐明朗的今天&#xff0c;运用什么样的平台可以帮助广大用户朋友实现这一目标&#xff1f;可视化流程设计平台是轻量级、更灵活、易操作、效率高的平台&#xff0c;可以快速定制客户专属的框架平台&#xff0c;为每一位客户朋友做好数据管理&#xff0c;…

【小沐学Unity3d】3ds Max 骨骼动画制作(蒙皮修改器skin)

文章目录 1、简介2、蒙皮修改器3.1 骨骼对象测试3.2 Biped对象测试 3、动画制作4、FBX导出结语 1、简介 “蒙皮”修改器是一种骨骼变形工具&#xff0c;主要设计用于通过另一个对象对一个对象进行变形来创建角色动画。可使用骨骼、样条线和其他对象变形网格、面片和 NURBS 对象…

【Java 基础篇】Java 数组使用详解:从零基础到数组专家

如果你正在学习编程&#xff0c;那么数组是一个不可或缺的重要概念。数组是一种数据结构&#xff0c;用于存储一组相同类型的数据。在 Java 编程中&#xff0c;数组扮演着非常重要的角色&#xff0c;可以帮助你组织、访问和操作数据。在本篇博客中&#xff0c;我们将从零基础开…

如何使用C++11原子操作实现自旋锁

什么是自旋锁&#xff1f; C自旋锁是一种低层次的同步原语&#xff0c;用于保护共享资源的访问。自旋锁是一种轻量级的锁&#xff0c;适用于短时间的资源锁定。 自旋锁的特点&#xff1a;当一个线程尝试获取已经被另一个线程占有的自旋锁时&#xff0c;这个线程会进入一个循环…

从入门到精通,30天带你学会C++【第六天:与或非三兄弟和If判断语句(博主目前最长文章,2514字)】(学不会你找我)

目录 前言 计算机里的真和假 与或非三兄弟 ​编辑与运算&#xff08;&&&#xff09; 具体说明表格&#xff1a; 举个栗子1&#xff1a; 或运算&#xff08;||&#xff09; 具体说明表格&#xff1a; 举个栗子2&#xff1a; 非运算&#xff08;!&#xff09…

python编写MQTT订阅程序

Download | Eclipse Mosquitto 1、下载&#xff1a; https://mosquitto.org/files/binary/win64/mosquitto-2.0.17-install-windows-x64.exe 2、安装&#xff1a; 3、conf配置 1)使用notepad打开“C:\Program Files\mosquitto\mosquitto.conf”另存为c:\myapp\msquitto\mo…

C++的多重继承

派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。 …

漏洞发现-web应用发现探针类型利用(43)

关于在真实环境下面&#xff0c;这个漏洞该如何发现 这里老师把它分成了三块第一类是 #已知cms 如常见的dedecms&#xff0c;discuz&#xff0c;wordpress等源码结构&#xff0c;这些都是网上比较知名的php源码的cms的名称&#xff0c;这是我们在国内常见的几个程序&#xf…

【Java 基础篇】Java 方法使用详解:让你轻松掌握方法的奥秘

如果你正在学习Java编程&#xff0c;方法是一个不可或缺的重要概念。方法允许你将代码组织成可重用的块&#xff0c;提高了代码的可维护性和可读性。在本篇博客中&#xff0c;我们将深入探讨Java方法的使用&#xff0c;从基础概念开始&#xff0c;逐步介绍如何定义、调用、传递…

Netty-ChannelPipeline

EventLoop可以说是 Netty 的调度中心&#xff0c;负责监听多种事件类型&#xff1a;I/O 事件、信号事件、定时事件等&#xff0c;然而实际的业务处理逻辑则是由 ChannelPipeline 中所定义的 ChannelHandler 完成的&#xff0c;ChannelPipeline 和 ChannelHandler应用开发的过程…

剑指 Offer 44. 数字序列中某一位的数字(中等)

题目&#xff1a; class Solution { //本题单纯找规律&#xff0c;要注意通过n%digits来判断有几个位数为digits的数 public:int findNthDigit(int n) {long base 9, digits 1; //digits代表位数while(n-base*digits>0){ //该循环是为了确定目标数字所在…

找不到msvcp140.dll的解决方法【msvcp140.dll修复工具下载】

今天&#xff0c;我将为大家分享一个与我们日常工作息息相关的话题——msvcp140.dll重新安装的5种解决方法。在接下来的时间里&#xff0c;我将向大家介绍什么是msvcp140.dll,为什么会丢失&#xff0c;以及它的用途。最后&#xff0c;我将为大家提供5种解决方法&#xff0c;帮助…

【人工智能】—_神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略

神经网络、前向传播、反向传播 文章目录 神经网络、前向传播、反向传播前向传播反向传播梯度下降局部最小值多层前馈网络表示能力多层前馈网络局限缓解过拟合的策略 前向传播是指将输入数据从输入层开始经过一系列的权重矩阵和激活函数的计算后&#xff0c;最终得到输出结果的过…

useEffect 不可忽视的 cleanup 函数

在 react 开发中&#xff0c; useEffect 是我们经常会使用到的钩子&#xff0c;一个基础的例子如下&#xff1a; useEffect(() > {// some code here// cleanup 函数return () > {doSomething()} }, [dependencies])上述代码中&#xff0c; cleanup 函数的执行时机有如下…

[dasctf]misc1

不确定何种加密方式 P7NhnTtPUm/L3rmkP/eAhx5Vnbc2YyatkXCePJ0Wh2NYfqXGZCpZdCesMmEAihhUYI1PjoLq6FedZ7MSclA9h0/Dy4CavBwVg5RHr8XJmfbtuWkxK2Gn3sNTEzQi0p 1t_15_s3cR3t_k3y 也许是密钥

html5——前端笔记

html 一、html51.1、理解html结构1.2、h1 - h6 (标题标签)1.3、p (段落和换行标签)1.4、br 换行标签1.5、文本格式化1.6、div 和 span 标签1.7、img 图像标签1.8、a 超链接标签1.9、table表格标签1.9.1、表格标签1.9.2、表格结构标签1.9.3、合并单元格 1.10、列表1.10.1、ul无序…

vmware虚拟机远程开发

目录 1. 下载vmware2. 下载ubuntu镜像3. 安装4. 做一些设置4.1 分辨率设置4.2 语言下载4.3 输入法设置4.4 时区设置 5. 直接切换管理员权限6. 网络6.1 看ip6.2 ssh 7. 本地编译器连接远程服务器7.1 创建远程部署的配置7.2 文件同步7.3 远程启动项目 8. ubuntu安装golang环境8.1…

C++学习笔记总结练习:多态与虚函数

1 多态 多态分类 静态多态&#xff0c;是只在编译期间确定的多态。静态多态在编译期间&#xff0c;根据函数参数的个数和类型推断出调用的函数。静态多态有两种实现的方式 重载。&#xff08;函数重载&#xff09;模板。 动态多态&#xff0c;是运行时多态。通过虚函数机制实…

单片机开发中的内存优化

在单片机开发中&#xff0c;内存优化是至关重要的&#xff0c;它不仅能够降低成本&#xff0c;还可以提高性能。本文将深入讨论如何在STM32单片机和C语言的环境中实施内存优化策略&#xff0c;以确保项目的顺利进行。 单片机内存资源通常包括RAM&#xff08;随机访问存储器&am…