Hello大家好,很高兴又见面了!给生活添点passion,开始今天的编程之路。
通过前几章的学习,我们已经掌握了做一些简单题目的能力,下面就由我带大家进练习一些常见题型吧!
1、排序问题
输入n个数字,将这十个数字按升序排序
输入要求:无
输出要求:无
其实实现这种题目的方法有很多种:
(1)冒泡排序
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int n = 0;
int arr[100] = { 0 };
do
{
scanf_s("%d", &arr[i]);
i++;
}
while (getchar() != '\n');//当输入回车是跳出循环
for (n = 0;n < i-1;n++)//共i个数,一共排序i-1趟
{
for (j = 0;j < i- n - 1;j++)
{
if (arr[j] > arr[j + 1])//相邻元素交换
{
int temp=0;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (n = 0;n <i;n++)
{
printf("%2d", arr[n]);
}
return 0;
}
(2)选择排序
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int n = 0;
int k = 0;
int arr[100] = { 0 };
do
{
scanf_s("%d", &arr[i]);
i++;
}
while (getchar() != '\n');//当输入回车是跳出循环
for (n = 0;n < i-1;n++)//共i个数,一共排序i-1趟
{
k = n;
for (j = n;j < i;j++)
{
if (arr[j] < arr[k])
{
k = j;
}
}
int temp = 0;
temp = arr[n];
arr[n] = arr[k];
arr[k] = temp;
}
for (n = 0;n <i;n++)
{
printf("%2d", arr[n]);
}
return 0;
}
(3)插入排序
void test(int arr[], int size)
{
int i, j, tmp;
for (i = 1; i < size; i++) {
if (arr[i] < arr[i-1]) {
tmp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > tmp; j--) {
arr[j+1] = arr[j];
}
arr[j+1] = tmp;
}
}
}
这里暂且简单介绍三种。
2、二分查找
二分查找就类似于我们的猜数字小游戏,每次猜数字都猜范围中间的,这样能最快找到该数字。我们这里用一个简单的小题引入。
查找数字5的下标:
#include<stdio.h>
int main()
{
int arr[10] = { 3,6,9,8,2,4,5,1,7,0 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组有多少元素
int max = sz - 1;//最大元素下标。
int min = 0;
int i = 0;
for (i = 0;i < 4;i++)
{
int mid = (min + max) / 2;
if (arr[mid] > 5)
{
max = mid;
}
else if (arr[mid] < 5)
{
min = mid;
}
else
{
printf("数字5下标为%d", min);
break;
}
}
return 0;
}
输出结果为4。
3、计算阶乘
要求:输入一个数字,并计算出他的阶乘
(1)循环法
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int ret = 1;
printf("请输入数字:");
scanf_s("%d", &n);
for (i = 1;i <= n;i++)
{
ret = i * ret;
}
printf("%d的阶乘为%d", n, ret);
return 0;
}
(2)递归法
#include<stdio.h>
int test(int n)
{
if (n == 1)
{
return 1;
}
else
return n * test(n - 1);
}
int main()
{
int n = 0;
int i = 0;
int ret = 1;
printf("请输入数字:");
scanf_s("%d", &n);
ret = test(n);
printf("%d的阶乘为%d", n, ret);
return 0;
}
我相信在具备了解决以上三种问题的能力后,刷题之路会如鱼得水!
好了,今天的内容就分享到这,期待我们下次再见!