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

目录

前言:

1.计算日期到天数转换

2.尼科彻斯定理 

3.密码检查

4.图片整理

5.寻找数组的中心下标

6.字符个数统计

7.多数元素


前言:

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


1.计算日期到天数转换

描述

根据输入的日期,计算是这一年的第几天。

保证年份为4位数且日期合法。

进阶:时间复杂度: O(n) ,空间复杂度:O(1) 

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

#include<stdio.h>
int main()
{
    int arrmonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int year, month, day;
    scanf("%d %d %d", &year, &month, &day);

    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        arrmonth[1]++;
    int i = 0;
    for (i = 0; i < month - 1; i++) 
    {
        day = day + arrmonth[i];
    }
    printf("%d", day);
    return 0;
}

思路:

1.闰年的判断方法

(1)能被4整除,但不能被100整除;

(2)能被400整除。

2. 每个月份的天数

一三五七八十腊 是31天, 二月,闰年 29天,平年28天, 其他月份是30天

3. 计算月份之前的n-1月的天数,加上本月的天数


2.尼科彻斯定理 

描述

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。

输入描述:

输入一个int整数

输出描述:

输出分解后的string

#include<stdio.h>
int main()
{
	int n = 0, i = 0; char str[1000];
	while (scanf("%d", &n) == 1)
	{
		int x = n + (n - 1) * (n - 1);
		sprintf(str, "%d", x);
		for (i = 0; i <n-1 ; i++)
		{
			x += 2;
			sprintf(str, "%s+%d", str, x);		
		}
		puts(str);
	}
	return 0;
}

解析:

数值大小是几,就会有几个奇数相加。

1^3=1                                

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

我们不难发现这是一个从1开始的奇数等差数列{1,3,5,7,9……}。

故我们只要知道了数值是几所对应的数,就可以知道相加的任意数,并且符合规律。

如:

1^3=1                                                          1- >1                          1+(1-1)^2

2^3=3+5                                                      2- >3                          2+(2-1)^2

3^3=7+9+11                                                3- >7                         3+(3-1)^2

4^3=13+15+17+19                                     4- >13                        4+(4-1)^2

……

……                                                                                               n+(n-1)^2

sprintf的用法如果不熟,可以看本博主的这篇文章。(在文件的顺序读写的第7个)

C语言文件操作_WHabcwu的博客-CSDN博客需求:我们想把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据 库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。1.2。https://blog.csdn.net/WHabc2002/article/details/131755342


3.密码检查

描述

小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:

1. 密码只能由大写字母,小写字母,数字构成;

2. 密码不能以数字开头;

3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;

4. 密码长度至少为8

现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。

输入描述:

输入一个数n,接下来有n(n≤100)行,每行一个字符串,表示一个密码,输入保证字符串中只出现大写字母,小写字母和数字,字符串长度不超过100。

输出描述:

输入n行,如果密码合法,输出YES,不合法输出NO

分析:

这道题只需要将字符串从头到尾的每种字符(大写字符,小写字符,数字,其他字符)分别统计出来后。然后逐个 判断是否符合条件即可。而条件的判断包含有:
长度不小于 8
不能以数字开头
只能包含字母和数字
大小写和字符必须具备两种以上

直接看代码:

#include<stdio.h>
#include<ctype.h>
#include<assert.h>
#include<string.h>
int f(char* arr)
{	    
	    assert(arr);
	    int i = 0;
		int sz = strlen(arr);
		if (sz < 8)
		{
			return 0;
		}
		if (arr[0] >= '0' && arr[0] <= '9')
		{
			return 0;
		}
		int* count = (int*)calloc(3, sizeof(int));
		for (i = 0; i < sz; i++)
		{
			
			if (arr[i] >= '0' && arr[i] <= '9')
			{
				count[0] = 1;
			}
			else if (islower(arr[i]))
			{
				count[1] = 1;
			}
			else if (isupper(arr[i]))
			{
				count[2] = 1;
			}
			else
			{
				free(count);
				return 0;
			}
		}
		if ((count[0] + count[1] + count[2] )>= 2)
		{
			free(count);
			return 1;
		}
		else
		{
			free(count);
			return 0;
		}

}
int main()
{
	char arr[101] = { 0 };
	int n=0;
	scanf("%d", &n);
	while (n)
	{
		scanf("%s", arr);
		n--;
		int x=f(arr);
		if (x == 1)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO");
		}
	}
	
	return 0;
}

4.图片整理

描述

 输入描述:

 输出描述:

 

 代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[1000];
	gets(arr);
	int i = 0, j = 0;
	for (i = 0; i < strlen(arr) - 1; i++)
	{
		for (j = 0; j < strlen(arr) - 1 - i;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				char t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
	}
	puts(arr);
	return 0;
}
【答案解析】:
这道题考察的其实就是字符排序,每个 ascii 字符在内存都有一个对应的 ascii 值,通过内存中数据的存储进行排序 就行。
冒泡排序:相邻数据之间进行比较交换,将较大或较小的数据向后推到数组末尾,然后开始下一轮次大数据的冒泡 过程。

5.寻找数组的中心下标

寻找数组的中心下标https://leetcode.cn/problems/find-pivot-index/

#include<stdio.h>
int pivotIndex(int* nums, int numsSize) {
	int total = 0;
	int i = 0;
	int sum = 0;
	for (i = 0; i < numsSize; i++)
	{
		total += nums[i];
	}
	for (i = 0; i < numsSize; i++)
	{
		if (2 * sum + nums[i] == total)
		{
			return i;
		}
		sum += nums[i];
	}
	return -1;
}

解析:

记数组arr的全部元素之和为 total,当遍历到第 i 个元素时,设其左侧元素之和为sum,

则其右侧元素之和为 total−sum-arr[i],左右侧元素相等即有arr[i]+sum*2=total.


6.字符个数统计

 思路:创建128大小的数组,标记出现过的字符,然后统计标记个数

#include<stdio.h>
#include<string.h>
int main()
{
	int arr[127] = { 0 };
	char str[500];
	gets(str);
	int i=0;
	int sz = strlen(str);
	int count = 0;
	for (i = 0; i < sz; i++)
	{
		if (arr[str[i]] == 0)
		{
			count++;
			arr[str[i]] = 1;
		}
	}
	
	printf("%d", count);
	return 0;
}

7.多数元素

多数元素https://leetcode.cn/problems/majority-element/

 方法1:数组排序法

思路:

如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为 n/2
的元素(下标从 0 开始)一定是众数。

int majorityElement(int* nums, int numsSize) {
	int i = 0, j = 0;
	for (i = 0; i < numsSize-1; i++)
	{
		for (j = 0; j < numsSize - 1; j++)
		{
			if (nums[j] < nums[j + 1])
			{
				int t = nums[j];
				nums[j] = nums[j + 1];
				nums[j + 1] = t;
			}
		}
	}
	return nums[numsSize / 2];
}

因为冒泡排序的时间复杂度为O(n^2)

方法2:摩尔投票法

int majorityElement(int* nums, int numsSize){
int count = 1;
int tmp = nums[0];
for (int i = 1; i < numsSize; i++) {
if (tmp == nums[i]){//与保存的字符相同则计数+1
count++;
} else {//与保存的字符不同则计数-1
count--;
//计数为0表示有可能保存的字符不是最多的字符,换下一个
if (count == 0) tmp = nums[i + 1];
}
}
return tmp;
}
【答案解析】:
一个数组中有一个数字出现次数大于 n/2 ,从第 0 个字符开始,假设它就是最多的那个数字,遇到相同的数字则 计数 +1 , 遇到不同的则计数 -1 ,其实就是互相消耗,等到计数为 0 的时候,表示本次互拼完毕,从下一个字符重 新开始互拼,但是归根结底出现次数大于 n/2 的这个数字数量更多,因此也是最后保留的字符。
示例:
"23335" 首先从字符 2 开始计数 1 ,遇到 3 ,不同则 -1 ,互拼消耗 重新从剩下的 "335" 开始的过程,这时 候保存的字符为 3 ,遇到 3 则计数 +1 , 遇到 5 则计数 -1 ,在计数不为 0 时,走到末尾保存的字符就是个数超过 n/2 的字符


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

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声

本示例使用的设备&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 服务端代码&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.…

iptables的使用规则

环境中为了安全要限制swagger的访问&#xff0c;最简单的方式是通过iptables防火墙设置规则限制。 在测试服务器中设置访问swagger-ui.html显示如下&#xff0c;区分大小写&#xff1a; iptables设置限制访问9783端口的swagger字段的请求&#xff1a; iptables -A INPUT -p t…

Python可视化工具库实战

Matplotlib Matplotlib 是 Python 的可视化基础库&#xff0c;作图风格和 MATLAB 类似&#xff0c;所以称为 Matplotlib。一般学习 Python 数据可视化&#xff0c;都会从 Matplotlib 入手&#xff0c;然后再学习其他的 Python 可视化库。 Seaborn Seaborn 是一个基于 Matplo…

Vue 中 diff 算法原理

一、Diff 概念 Vue 基于虚拟 DOM 做更新。diff 算法的核心就是比较两个虚拟节点的差异&#xff0c;返回一个 patch 对象&#xff0c;这个对象的作用就是存储两个节点不同的地方&#xff0c;最后用 patch 里记录的信息进行更新真实DOM。 diff 算法的在很多场景下都有应用&#…

计算机竞赛 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

6.oracle中listagg函数使用

1. 作用 可以实现行转列&#xff0c;将多列数据聚合为一列&#xff0c;实现数据的压缩 2. 语法 listagg(measure_expr&#xff0c;delimiter) within group ( order by order_by_clause); 解释&#xff1a; measure_expr可以是基于任何列的表达式 delimiter分隔符&#xff0c…

创建harbor仓库并进行一些操作

文章目录 前言一、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。二、安装搭建私有仓库 Harbor1、安装docker-compse2、安装harbor 3、修改配置文件4、运行脚本5 登入harbor仓库总结 前言 本篇文章需要完成的以下几个操作&#xff1a; 使用mysql:5.6和 ownclo…

爬虫逆向实战(二十)--某99网站登录

一、数据接口分析 主页地址&#xff1a;某99网站 1、抓包 通过抓包可以发现登录接口是AC_userlogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”可以发现txtPassword和aws是加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无…

【Git版本控制工具使用---讲解一】

Git版本控制工具使用 安装设置用户名签名和邮箱Git常用的命令 初始化本地库查看本地状态Git 命令添加暂存区提交本地库查看版本信息修改文件版本穿梭 安装 首先根据自身电脑的配置选择性的安装是32位的还是64位的Git版本控制工具 我这边安装的是64位的 以下是我安装的时候的过…

C语言:选择+编程(每日一练Day8)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;字符个数统计 思路一&#xff1a; 题二&#xff1a;多数元素 思路一&#xff1a; 本人实力有限可能对一些…

事件捕获和事件冒泡

事件捕获和事件冒泡与事件流有关系。 以下代码&#xff0c;点击 aa &#xff0c;控制台会打印什么呢&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content&q…

Docker(一)-安装、架构、业务开发常用命令、Dockerile、镜像卷、镜像仓库

基于业务开发使用Docker Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序&#xff0c;并可以缩短从编写到部署运行代码…

App Inventor 2 开发 ChatGPT 对话App

ChatGPT大家应该不会陌生&#xff0c;它的回答内容非常的专业及深入&#xff0c;具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App&#xff0c;先看效果&#xff1a; App Inventor 2 ChatGPT教育领域对话演示 代码块如下&#xff1a; 用到的核心组件“ChatBot…

kafka--技术文档--spring-boot集成基础简单使用

阿丹&#xff1a; 查阅了很多资料了解到&#xff0c;使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意&#xff01; 使用spring-boot整合kafka 1、导入依赖 核心配…

Web3和去中心化:互联网的下一个演化阶段

文章目录 Web3和去中心化的定义Web3&#xff1a;去中心化&#xff1a; 为什么Web3和去中心化如此重要&#xff1f;数据隐私和安全&#xff1a;去中心化的创新&#xff1a;去除中间商&#xff1a; Web3和去中心化的应用领域去中心化金融&#xff08;DeFi&#xff09;&#xff1a…

掌握AI助手的魔法工具:解密Prompt(提示)在AIGC时代的应用「上篇」

在当今的AIGC时代&#xff0c;我们面临着越来越多的人工智能技术和应用。其中一个引人注目的工具就是Prompt&#xff08;提示&#xff09;。它就像是一种魔法&#xff0c;可以让我们与AI助手进行更加互动和有针对性的对话。那么&#xff0c;让我们一起来了解一下Prompt&#xf…

长胜证券:货币政策什么意思?

钱银政策是指国家钱银当局经过调控钱银供给量和利率等手法&#xff0c;以到达操控通货膨胀、坚持经济稳定、促进经济增长等目的的一种宏观经济政策。简而言之&#xff0c;钱银政策便是国家中央银行对钱银供给和利率进行调控的政策。那么具体来说&#xff0c;钱银政策到底有哪些…

windwos系统如何创建typecho个人博客并通过内网穿透实现无公网IP访问

文章目录 前言1. 环境安装2.安装Typecho3.安装cpolar内网穿透4. 固定公网地址5.配置Typecho 前言 Typecho是一款PHP语言编写的开源博客程序&#xff0c;它是一个轻量级的内容管理系统&#xff0c;专注于博客领域。支持多用户、多站点、多语言等功能&#xff0c;可以满足不同用…

水库大坝安全监测的主要内容包括哪些?

在水库大坝的实时监测中&#xff0c;主要任务是通过无线传感网络监测各个监测点的水位、水压、渗流、流量、扬压力等数据&#xff0c;并在计算机上用数据模式或图形模式进行实时反映&#xff0c;以掌握整个水库大坝的各项变化情况。大坝安全监测系统能实现全天候远程自动监测&a…

CSS中的vertical-align属性

vertical-align 1.CSS属性 - vertical-align 2.深入理解vertical-align – line boxes This property affects the vertical positioning inside a line box of the boxes generated by an inline-levelelement. 官方文档的翻译&#xff1a;vertical-align会影响 行内块级元素…