前言
大佬就可以撤退了!!(当然也可以温故而知新呀!!)
本次为C语言入门刷题!重在扎实基础,温习学过的基础知识!!!
夯实基础,走得更远!
一、数据进行比大小或者求最大(小)数
示例:
1. 可能当我们看到求最大值或者最小值的时候,首先想到的是冒泡排序(详情点击),将整个数组元素排序之后输出第一或者最后一个来输出最大值或者最小值。
2. 但今天我们用不同的方法来实现!
代码如下:
#include<stdio.h> int main() { int n=0,m=0; scanf("%d %d",&n,&m); //几行几列 int arr[10][10]={0}; int i=0,j=0; int max=arr[0][0]; //最大值先定为数组的第一个元素 int x=0,y=0; //输出的坐标x,y for(i=0;i<n;i++) { for(j=0;j<m;j++) { scanf("%d",&arr[i][j]); //每输入一个元素,就与最大值max比较 if(arr[i][j]>max) //比max大的话,就赋值于max { max=arr[i][j]; x=i+1; y=j+1; //题目要求输出x和y,不是数组的下标,而是下标加1 } } } printf("%d %d",x,y); return 0; }
注意:这里为什么一开始我们不将0作为最大值呢?
因为当数组元素中有负数时,或者都为负数,如果我们将0作为最大值,则输出结果会永远是0.
所以将最大值作为数组中的任意一个元素,就不会影响到正常的比较了。(max=arr[0],只是个人习惯)
二、桶排序应用
1.去重整数并排序
1. 首先,看到这道题的第一瞬间,我会想到最传统的方法:
先将输入的数组元素进行去重,arr[i] 和 arr[i+1]进行比较,如果两个数相等,则将第一个数(arr[i])置为0,然后继续循环比较数组中的剩下元素,之后利用排序方法排序后,输出不为0的数组元素。
代码如下:
#include<stdio.h> void bubble(int arr[], int n) //冒泡排序 { int i = 0; int j = 0; for (i = 0; i < n - 1; i++) { for (j = 0; j < n- 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int n = 0; scanf("%d", &n); int arr[100] = { 0 }; int i = 0; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } int sz = sizeof(arr) / sizeof(arr[0]); //数组元素个数 bubble(arr, n); // 先排序再判断或者 先判断再排序都行 for (i = 0; i < n; i++) { if (arr[i] == arr[i + 1]) { arr[i] = 0; } } for (i = 0; i < n; i++) { if (arr[i] != 0) { printf("%d", arr[i]); } } }
2.桶排序的方法!
#include<stdio.h> int main() { int n=0; int temp=0; //给桶标号 scanf("%d",&n); int arr[1001]={0}; //数组的个数即 桶的个数 for(int i=0;i<n;i++) { // 举例: scanf("%d",&temp); // 给桶标号(输入5,则标号5号桶) arr[temp]=temp; // 将5放入五号桶 // 所以这里我们就明白,输入n个数,即为n个桶标号,然后放入对应的值 } // 第一次n=5,放入5号桶,若第二次n=5,也放入5号桶,这样就做到了去重 // 的效果!而且桶是有顺序的,输出时,无需排序! for(int i=0;i<1001;i++) { if(arr[i]!=0) { printf("%d ",arr[i]); //没有标号的桶初始化为0,无需输出。 } } return 0; }
觉得怎么样?学会了吗?
2.查找数字出现的次数
1. 第一种传统的方法就是直接遍历数组元素,遇到查找元素就个数加一。
2. 桶排序方法!!
代码如下:
#include<stdio.h> int main() { int n=0; //元素个数 scanf("%d",&n); int arr[100]={0}; //桶的总数100,并且每个桶初始化为0 int temp = 0; //为桶标号 for(int i=0;i<n;i++) { scanf("%d",&temp); //每次输入一个数,即 给桶标号 arr[temp]++; //标号后,并且该桶元素加一.每用一次,元素加一(第一次用桶也要加一) } int k=0; //输出要查找的数字 scanf("%d",&k); //举例: printf("%d",arr[k]); //输入5,即看标号为5的桶用了几次。 return 0; }
做到这里,我相信你也学会了吧!可以再去反复琢磨琢磨,思考解题的过程和思路哦!
总结
相信大家看完以后,也看懂了!
那么这期的C语言入门刷题基础知识点就到这里啦!!
是不是觉得不够,内容太少?
那么就期待下期我们再见吧!!记得三连哦,别到时候找不到俺!