C语言百日刷题第八天

news2024/10/2 16:27:36

前言

今天是刷题第8天,放弃不难,但坚持一定很酷~
快来跟我一起刷题吧。

在这里插入图片描述

刷题第八天目录

  • 前言
    • 71.打印7层杨辉三角形
    • 72.重新排列数组
    • 73.冒泡排序
    • 74.将数字变成0的操作次数
    • 75.四叶玫瑰数

71.打印7层杨辉三角形

打印7层杨辉三角形
图案如下:
在这里插入图片描述
在这里插入图片描述
这个题我再前几天的刷题中也写过,但是很多人私信说上次写的太简陋了,那我这次就写完整。

通过图,可以看出。无论它是多少层的杨辉三角,它的前两层都是1,所以,无论我们会不会,都可以先把前两层搞定一下。其次,我们可以看出从第三层开始每个数等于它上方两数之和。理解了这以后,就可以来模拟一下每个数赋值的过程。
首先应该定义一个二维数组。
其次,把二维数组的前两层全部赋值为1,从第三层开始,中间的数应该等于上一行的前一列的数,加上,上一行当前列的数。
画图模拟一下具体实现过程,给大家看看。为了方便,这里我就模拟一下前四层的情况。
定义一个四行四列的二维数组:int arr[4][4]={0};

这个时候,内存中就会开辟4*4=16个int类型的小格子,从左边第一个开始,名字分别为:
arr[0][0]、arr[0][1]、arr[0][2]、arr[0][3]
………………………………………………………
arr[3][0]、arr[3][1]、arr[3][2]、arr[3][3]

首先,按照我们刚刚的分析,应该先把前两层初始化,及最旁边的数都初始化为1。有了思路,我们就可以利用循环,将我们想要赋值的地方初始化为1
我们可能会写出如下代码:

for (int i = 0; i < 4; i++)
{
	arr[i][0] = 1;
	arr[i][i-1] = 1;
}

乍一看,这段代码并没有问题,但实际上,当i=0时arr[i][i-1]会越界。
所以我们应该重新改一下,扔掉0行和0列,从第一行,第一列开始。

for (int i = 1; i <= 4; i++)
{
	arr[i][0] = 1;
	arr[i][i-1] = 1;
}

当执行完该段代码后,我们的数组就会变成这样子:

在这里插入图片描述

再回到最开始,通过观察杨辉三角的性质,可以知道,从第三行开始。
中间的数就等于上一行的前一列+上一行的当前列。

for (int i = 3; i <= 4; i++)
{
	for (int j = 2; j <= i - 1; j++)
	{
		arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
	}
}

执行完上面的赋值代码后,我们数组中的数,就会变成如下这个样子:
在这里插入图片描述
这样,杨辉三角的赋值过程就已经结束了,接下来就是打印过程了,二维数组的打印依旧二重for循环,分别控制行和列。为了把数对齐,可以设置打印五位整数,不足五位用空格补齐。

for (i = 1; i <= 7; i++)
{
  for (j = 1; j <= i; j++)
  {
    if (i >= j)
      {
        printf("%5d", arr[i][j]);
      }
  }
printf("\n");
}

所以最后把代码组装起来
因为我们要打印7层代码,使用要把4改为7,并且我们舍弃了0行0列的数组,所以我们创建数组的时候要创建的稍微大一点:

#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
int arr[10][10]={0};
   //赋值
    for (i = 1; i <= 7; i++)
    {
        arr[i][1] = arr[i][i] = 1;
    }
    for (i = 3; i <= 7; i++)
    {
        for (j = 2; j <= i - 1; j++)
        {
            arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
        }
}
    //打印
    for (i = 1; i <= 7; i++)
    {
        for (j = 1; j <= i; j++)
        {
            if(i>=j)
            		printf("%5d", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

72.重新排列数组

在这里插入图片描述

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* shuffle(int* nums, int numsSize, int n, int* returnSize)
{
    int * ret = (int*)malloc(sizeof(int)*numsSize);
    for(int i = 0;i<numsSize;i++)
    {
        if(i&1)
        {
            ret[i]=nums[n+i/2];
        }
        else
        {
            ret[i]=nums[(i+1)/2];
        }
    }
    *returnSize=numsSize;
    return  ret;
}

解释几个可能有疑惑的点:
1、(i&1) 是按位 与 运算,相当于取出 i 的2 进制数值的个位数。如果 i 是 十进制的奇数那么i&1得1,相反如果i是 十进制的偶数,i&1 得 0。
2.返回的数组必须是通过malloc进行内存分配的,调用者会对他进行free操作。

73.冒泡排序

有下面一列数据:
{0,-7,-9,9,2,51,7,14,35,37,49,43,41,1,3}
编写程序,用冒泡法将其按由小到大的顺序排列进数组ax[15]中。

冒泡排序:冒泡排序其实就是一直和旁边比,如果比旁边大,就交换位置,一直这样交换,直到完全排序完了为止。

接下来,我们就自己先定义一个冒泡排序函数:

void bubble_sort(int arr[], int sz)//sz表示数组元素个数
{
	for (int i = 0; i < sz - 1; i++)
	{
		for (int j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
	}
}

有了冒泡排序函数后这道题就非常简单了。

#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
	for (int i = 0; i < sz - 1; i++)
	{
		for (int j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
	}
}
int main()
{
	int arr[15] = { 0,-7,-9,9,2,51,7,14,35,37,49,43,41,1,3 };
	int ax[15] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);
	for (int i = 0; i < 15; i++)
	{
		ax[i] = arr[i];
	}
	for (int j = 0; j < 15; j++)
	{
		printf("%d  ", ax[j]);
	}
}

74.将数字变成0的操作次数

在这里插入图片描述

int numberOfSteps(int num) 
{
	if (num == 0)
	{
		return 0;
	}
	if (num % 2 == 1)
	{
		return numberOfSteps(num - 1) + 1;
	}
	else
	{
		return numberOfSteps(num / 2) + 1;
	}
}

这道题的操作方法其实是差不多的,对于这种基本新问题和旧问题思路一样的题,可以使用递归。
但是,递归一定要有明确的截至条件,并且每次递归后都会更加接近这个截至条件。

75.四叶玫瑰数

在这里插入图片描述
在这里插入图片描述
分析:使用循环,获取每个位上的数,最后再使用pow函数计算出它们各个位数的四次方,再相加。
如果有等于它,那么这个数就是四叶玫瑰数。

#include <stdio.h>
#include <math.h>
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=n;i<=m;i++)
    {
        int a=i%10;
        int b=i/10%10;
        int c=i/100%10;
        int d=i/1000%10;
        if((pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4))==i)
        printf("%d ",i);
    }
}

记得注意下pow函数的使用方法:

在这里插入图片描述

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

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

相关文章

外企面试中的7 个 Android Lifecycle 重要的知识点

习惯性的每天都会打开 medium 看一下技术相关的内容&#xff0c;偶然看到一位大佬分享和 Android Lifecycle 相关的面试题&#xff0c;觉得非常的有价值。 在 Android 开发中 Android Lifecycle 是非常重要的知识点。但是不幸的是&#xff0c;我发现很多新的 Android 开发对 A…

准备pmp考试第13天

准备pmp考试第13天 32 31 感觉答案和题目没有关系 感觉答案和题目没有多大关系&#xff0c;题目看越多 错的越多&#xff0c;答案不按照问的回答&#xff0c;跑题了 30 29 28 PMP 激励&#xff1a;为某人采取行动提供了理由。 提高团队参与决策的能力并鼓励他们独立工作。这里面…

go - rune类型

一、简介 rune类型是Go语言的一种特殊数字类型。 rune是类型int32的别名&#xff0c;在所有方面都等急啊于它&#xff0c;用来区分字符值跟整数值。 Go语言通过rune处理中文&#xff0c;支持国际化多语言。 字符串由字符组成&#xff0c;字符的底层由字节组成&#xff0c;而一…

码神之路项目总结(二)

目录 一、登录功能 & 二、获取用户信息& 三、退出登录 四、登录拦截&#xffe5; 五、ThreadLocal保存用户信息&#xffe5; 六、文章详情 一、登录功能 & 请求接口&#xff1a; 思路&#xff1a; 1、首先接收前端传过来的用户名和密码&#xff0c;判断值是否为空…

知识图谱认知智能理论与实战----------第二章 知识图谱模式设计

文章目录一. 知识图谱模式二. 模式与本体三. 本体概论I. 模式与本体辨析II.本体的构成要素III.实体分类IV.实体分类四. 六韬法I. 场景II. 复用III. 事物IV. 联系V. 约束VI. 评价一. 知识图谱模式 实体&#xff1a;eg&#xff1a;法国&#xff0c;巴黎…关系&#xff1a;eg&…

深度学习入门(三十六)计算性能——异步计算、自动并行

深度学习入门&#xff08;三十六&#xff09;计算性能——异步计算、自动并行前言计算性能——异步计算教材1 异步计算1.1 通过后端异步处理1.2 小结2 自动并行2.1 基于GPU的并行计算2.2 并行计算与通信3.3 小结前言 核心内容来自博客链接1博客连接2希望大家多多支持作者 本文…

一起Talk Android吧(第四百一十三回:使用三角函数绘制正弦波)

文章目录整体思路图形讲解示例程序注意事项各位看官们&#xff0c;大家好&#xff0c;上一回中咱们说的例子是"Math类常用方法介绍",这一回咱们介绍的例子是使用三角函数绘制正弦波。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; …

leetcode-每日一题-1710-卡车上的最大单元数(简单,哈希,暴力)

今天的这道题其实很好读懂&#xff0c;因为很容易可以看出来暴力求解&#xff0c;但其实还是隐藏一个hash求解法很巧妙&#xff0c;因为我在很久之前就用过hash解答过这样类似的题&#xff0c;所以这个题也是可以使用的&#xff0c;可以看看我第二个hash解法 目录 暴力效率(效…

SBF vs. 火柴大王

生活中的一切都建立在自信之上。”Ivar Kreuger1929年10月28日&#xff0c;瑞典商人Ivar Kreuger出现在《时代》杂志的封面上。 他是当时美国最受关注的人物之一&#xff0c;因为他富有、有权势、神秘。Kreuger控制着四分之三的火柴生产和销售&#xff0c;在全球35个不同国家拥…

wy的leetcode刷题记录_Day43

wy的leetcode刷题记录_Day40 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2022-11-15 前言 今天时间比较多而且题目比较简单&#xff0c;应该能写三四道题。 目录wy的leetcode刷题记录_Day40声明前言1710. 卡车上的最大单元数题目介…

Spectacle源码编译方法

一、简介 Spectacle 是一个用于抓取桌面截图的简单应用程序。它可以抓取整个桌面、单个显示器、当前活动窗口、鼠标所在的窗口或是屏幕上的一块矩形区域的图像。截取的图像可被打印、发送到其他应用程序进行处理、或是直接保存下来。 Spectacle是archlinux wiki中推荐KDE使用…

刘二大人CNN

10.卷积神经网络&#xff08;基础篇&#xff09;_哔哩哔哩_bilibili 0、前一部分 卷积层 和 subsampling 叫做Feature Extraction特征提取器&#xff0c;后一部分叫做classification 1、每一个卷积核它的通道数量要求和输入通道是一样的。这种卷积核的总数有多少个和你输出通…

SpringBoot+Vue项目医院挂号系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JDK版…

2.6 自定义srv python

功能介绍 以自定义数据类型为基础&#xff0c;完成一个节点作为服务器&#xff0c;另一个节点接收传送两个数字到服务端&#xff0c;服务端计算后反馈到客户端进行打印输出 1、工作空间 1.1 创建工作空间lee_ws mkdir -p ~/lee_ws/src cd ~/lee_ws/src/ catkin_init_worksp…

leetcode134.加油站 贪心法求解 (c++版本)

题目描述 题目比较长&#xff0c;明确以下这点就可以 gas数组是当前下标i加油站所能加的油cost数组是从当前下标i加油站到下一加油站所消耗的油那么gas [i]与cost [i] 的大小就决定了车辆能否从当前加油站出发到达下一加油站 上面三点非常重要是能正确做出题目的必须要求 其实…

字符流,编码表,字符流写数据,字符流读数据

文章目录前言字符流编码表字符串中的编码解码问题字符流写数据字符流读数据总结前言 因为近期考试原因&#xff0c;还有自身惰性的问题&#xff0c;小编最近停更了一段时间&#xff0c;随之而来的罪恶感让我又开启了自学与创作之路&#xff0c;学习这么久&#xff0c;自己虽然…

来源稳定的l2逐笔接口数据去哪找?

l2逐笔接口的逐笔数据的最初来源均是从交易所获取&#xff0c;其授予了一些信息服务商L2非展示数据接口转发权限&#xff0c;其中包含了逐笔成交、逐笔委托等数据。使用时&#xff0c;通常是从信息商处购买&#xff0c;比如同花顺、万得、国泰安等等。那么小编认为通过交易所授…

mysql中find_in_set()函数的使用及in()用法详解

MySQL手册中find_in_set函数的语法解释&#xff1a; FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22) 查询字段(strlist)中包含(str)的结果&#xff0c;返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strli…

Linux:rpm与yum(内含:1.rpm介绍+2.卸载rpm包+3.安装rpm(应用案例)+4.yum(应用案例))

1.rpm介绍使用: 实例&#xff1a;查看当前系统是否安装了 firefox &#xff0c;操作如下&#xff1a; 解释&#xff1a; 名称&#xff1a;firefox 版本号&#xff1a;91.11.0-2 使用操作系统&#xff1a;el7.centos.x86_64 表示centos.x的64位系统。 查询软件包是否安装&#…

跨境电商卖家必知的9个圣诞节营销技巧

关键词&#xff1a;跨境电商卖家、圣诞节营销 圣诞节——对跨境电商卖家来说是非常重要的促销节日。根据以往的经验&#xff0c;您或许已经有了初步的促销想法&#xff0c;想知道您今年的跨境电子商务营销策略是否正确&#xff1f;为您整理了跨境电商卖家必须注意的营销技巧&am…