🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTOP创作者~周榜109﹣总榜1007⇿全网访问量35w+🏅 🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客 📃 📣系列专栏-【C】题目_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🌠题集 of ⑩①🌠 🔥第五十一题→求出0~100000之间所有的"水仙花数"并输出🔥 🔥第五十二题→定义 arr 数组的内容为十个元素,必须使用指针完成 arr 数组访问每一个元素并且打印🔥 🔥第五十三题→输入数字,用※号打印菱形🔥 🔥第五十四题→喝汽水,1瓶汽水1元,2个空瓶可以换1瓶汽水,输入相应的"钱(数字)",可以喝多少汽水🔥 🔥第五十五题→随机一个整数数组,数组元素指定为10(最大值9),实现一个函数。来调整该数组中数字的顺序使得数组中所有的奇数位数位于前半部分,所有偶数位于数组后半部分🔥 📢第五十一题→代码📢 📢第五十二题→代码📢 📢第五十三题→代码📢 📢第五十四题→代码📢 📢第五十五题→代码📢 🔥第五十一题→求出0~100000之间所有的"水仙花数"并输出🔥 ⒈题目的简介。 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个③位数,它的每个位上的数字的③次幂之和等于它本身。 计算-1^3 + 5^3+ 3^3 = 153 ✔ ⒉题目的本质。 说明⇢"水仙花数"是指一个n位数,其中各位数字的n次方之和确好等于该数字本身。 如:153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 1 + 125 + 27 = 153,则153是一个"水仙花数" 。 像个位数0~9本身就是个位n次方之和就一定是水仙花数。因为1乘以任何个位数都等于它本身。 拓展-这道题目相较于还是稍微有点难度的,本身也是一道基础的算法题。 百度简介-水仙花数_百度百科 (baidu.com) 🔥第五十二题→定义 arr 数组的内容为十个元素,必须使用指针完成 arr 数组访问每一个元素并且打印🔥 ⒈题目的本质。 说明⇢定义 arr 数组的内容为十个元素,必须使用指针完成 arr 数组访问每一个元素并且打印。 ⒉题目的讲解。 说明⇢这道题目是比较容易的一道题目,对于初学者新手来说唯一的难点就是如何使用指针完成 arr 数组访问每一个元素并且打印。 ⒊指针的说明。 说明⇢对于指针来说实际上它就是我们初学者学习『C语言』路上的大"Boss"。 实际上无非就是理解两句话。 ①指针就是地址。 ②指针变量就是用来存放地址的。 注⇢指针变量不是、不等价于指针,我们大多数使用的是指针变量,这个是在学习『C语言』的一个很大的误区,很多人会把指针变量理解成和指针等价的。 🔥第五十三题→输入数字,用※号打印菱形🔥 ⒈做这种题目一定要用代入法和找它的规律。我们可以假设输入数字⑤,来观察运行结果从而找到规律。 ※ ※※ ※※※ ※※※※ ※※※※※ ※※※※ ※※※ ※※ ※ ⒉上述是假设我们输入数字5的运行结果。 首先,当我们看这种程序我们可以假设分为上半轴部分和下半轴的部分。这样有利于我们更好的解题。 //上半轴 ※ ※※ ※※※ ※※※※ ※※※※※ //下半轴 ※※※※ ※※※ ※※ ※ ⒊先实现上半轴的部分,再来实现下半轴的部分。其实思路明确起来写代码也就很容易了。 这种代码如果你并没有一个很好的思路的话,不妨一边打代码一边去调试运行下。这样可能你做着做着就跟着思路走了,这种其实就是调试在引导这里,加上你自己的思路也在跟上。 🔥第五十四题→喝汽水,1瓶汽水1元,2个空瓶可以换1瓶汽水,输入相应的"钱(数字)",可以喝多少汽水🔥 题目讲解思路🖍 首先,我们一定要先想到一个问题。当我们给"0"块钱的时候,岂不是就是没有给钱呢。那么我们这里就可以使用 if - else 语句了。当 钱>0 的时候就直接实现程序步骤,不然就是<0了。 那么 1瓶汽水1元,2个空瓶可以换1瓶汽水。当是1块钱的情况就相等于。那么当我们买两瓶汽水不就相当于三瓶汽水了吗。因为,当我们喝了两瓶就可以换一瓶。 那么可以推出-假设买两瓶→ 2 * 钱 - 1 = 喝汽水数量。 这里减一是2个空瓶只能换1瓶汽水,所以要减一。如果是买一瓶那就只有一瓶,所以减一在这里是一定要的。 那么可能有人会说三瓶呢? 这里我们来推算下:买了三瓶意为着喝了三瓶,首先给老板两个瓶子,换了一瓶。现在我们还剩 1 瓶 + 一个瓶子,我们把那1瓶喝完不就相当于有两个瓶子了吗。可以再去换一瓶。 3 + 1 + 1 = 5 瓶,就相当于我们 3 元 买了 5瓶。 用推算出来的式子算下:2 * 钱 - 1 = 喝汽水数量,没毛病ヾ(≧▽≦*)o 🔥第五十五题→随机一个整数数组,数组元素指定为10(最大值9),实现一个函数。来调整该数组中数字的顺序使得数组中所有的奇数位数位于前半部分,所有偶数位于数组后半部分🔥 题目讲解思路🖍 随机输入一个整形数组,数组元素指定元素为10。这个随机数组实际上用 rand() 函数就可以实现。把 rand() % 10 就可以得到 0~9 的数字了。再把这个赋值给整形数组,就可以随机产生 0~9 的数字了。 使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒) srand((unsigned)time(NULL)); 然后⇢就是用 print() 函数实现打印数组。 最后⇢就是使用 move() 函数实现整该数组中数字的顺序使得数组中所有的奇数位数位于前半部分,所有偶数位于数组后半部分。 那么这个程序就能很好的实现了,快来尝试下吧(๐॔˃̶ᗜ˂̶๐॓) 📢第五十一题→代码📢
#define _CRT_SECURE_NO_WARNINGS 1
#define Number 100000
#include<stdio.h>
#include<math.h>
int main(void)
{
int i = 0;
for (i = 0; i <= Number; i++)
{
//计算 i 的位数 (n)
int n = 1;
int tmp = i;//注意:要把 i 的值赋值给 tmp
while (tmp / 10)
{
n++;
tmp = tmp / 10;
}
//计算i每一位n次方之和
tmp = i;
int sum = 0;
while (tmp)
{
sum += (int)pow(tmp % 10, n);//pow()-求次方
tmp = tmp / 10;
}
//判断
if (sum == i)
{
printf("%d\n", i);
}
}
return 0;
}
运行结果🖊 0 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 📢第五十二题→代码📢
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main(void)
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int* p = arr;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));// 访问每一位数组下标,打印.
}
return 0;
}
运行结果🖊
1 2 3 4 5 6 7 8 9 10 📢第五十三题→代码📢
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
int input = 0;
printf("请输入数字->:");
scanf("%d", &input);
int i = 0;
//上半轴部分
for (i = 0; i < input; i++)
{
int j = 0;
for (j = 0; j < input - i - 1; j++)
{
printf(" ");//打印空格(1)
}
for (j = 0; j < i + 1; j++)
{
printf("※");//打印星号(2)
}
printf("\n");
}
//下半轴部分
for (i = 0; i < input - 1; i++)
{
int j;
for (j = 0; j <= i; j++)
{
printf(" ");//打印空格(1)
}
for (j = 0; j < (input - 1) - i; j++)//这里注意下优先级大小
{
printf("※");//打印星号(2)
}
printf("\n");
}
return 0;
}
运行结果🖊
请输入数字->:5
※
※※
※※※
※※※※
※※※※※
※※※※
※※※
※※
※
📢第五十四题→代码📢
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
usnigned int m = 0;//无符号,不可能倒贴钱(~ ̄▽ ̄)~
printf("宁要付多少钱:");
scanf("%d", &m);
if (m > 0)
printf("喝汽水数量:%d\n", m = 2 * m - 1);
else
printf("你这是干嘛,给钱!\n");
return 0;
}
运行结果🖊 假设输入结果为↓ 宁要付多少钱:3 喝汽水的数量:5 📢第五十五题→代码📢
#define _CRT_SECURE_NO_WARNINGS 1
#define Number 10
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
void print(int *arr, int sz)
{
int i = 0;
printf("随机10个整形数组: ");
for (i = 0; i < Number; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void move(int arr[],int sz)
{
int left = 0; //左下标
int right = sz - 1; //右下标
while (left < right)
{
//从前往后查找偶数位置,如果是偶数的话交换,如果是奇数的(不交换)走向下一个元素判断是不是奇数。
while ((left < right) && (arr[left] % 2 == 1))
{
left++;
}
//从后往前查找奇数位置,如果是奇数的话交换,如果是偶数的(不交换)走向下一个元素判断是不是偶数。
while ((left < right) && (arr[right] % 2 == 0))
{
right--;
}
//把找到的值进行交换。
if (left < right)
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
printf("查找并且交换完的值:");
int i = 0;
for (i = 0; i < Number; i++)
{
printf("%d ", arr[i]);
}
}
int main(void)
{
srand((unsigned)time(NULL));
int arr[Number] = { rand() % 10
, rand() % 10,
rand() % 10,
rand() % 10,
rand() % 10,
rand() % 10,
rand() % 10,
rand() % 10,
rand() % 10,
rand() % 10 };//由于太长,我们这样写更加清晰。
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr,sz);
move(arr,sz);
return 0;
}
运行结果🖊 随机10个整形数组: 1 2 3 4 0 5 4 9 0 7 查找并且交换完的值:1 7 3 9 5 0 4 4 0 2