C语言百日刷题第八天
创始人
2024-01-21 10:28:08

前言

今天是刷题第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 
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;iif(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
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 
#include 
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函数的使用方法:

在这里插入图片描述

相关内容

热门资讯

长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
不用扬鞭自奋蹄 乘势而上千帆竞... 思明区正全力向“两个进位”目标发起冲刺,努力为建设高素质高颜值现代化国际化的厦门作出“思明贡献”。(...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
好听的民谣歌曲 2021最火的... #我的年度歌单#在2021年里听过很多民谣,但是最能触及心中温柔的还是下面的几首。不听民谣的理由有很...