1.有序序列判断
解题思路:
这里我们先看代码,我们定义了一个flag1和flag2,它的作用主要就是判断是不是升序,具体怎么使用的,我为大家画图展示。
解题代码:
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int arr[50] = { 0 };int flag1 = 0;int flag2 = 0;int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);if (i > 0){if (arr[i] > arr[i - 1])flag1 = 1;elseflag2 = 1;}}if (flag1+flag2 == 1)printf("sorted\n");elseprintf("unsorted\n");return 0;
}
2.序列中删除指定数字
解题思路:
我们只需要在数组中不打印要删除的数字即可。
解题代码:
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int arr[50] = { 0 };int c = 0;int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//输入要找的数字scanf("%d", &c);for (i = 0; i < n; i++){//如果当前下标的数子不等于要删除的数字,我们就打印它if (arr[i] != c){printf("%d ", arr[i]);}}return 0;
}
方法2:
这种方法和上面的思想差不多。
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int arr[50] = { 0 };int c = 0;int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//输入要找的数字scanf("%d", &c);int j = 0;for (i = 0; i < n; i++){if (arr[i] != c){arr[j++] = arr[i];}}for (i = 0; i < j; i++){printf("%d ", arr[i]);}return 0;
}
3.序列中整数去重
解题思路:
假设我们现在有五个数字:
10 12 93 12 75我们想去重的话,首先要拿第一个数字和后面所有的数子比较,再用第二个数字和后面的所有数字比较,如果有相同的,我们就把后面的数字把那个数字覆盖掉。
这里我直接画图为大家展示。
另外还有一种情况,如果有多个相同的数字的话,需要特殊处理。
解题代码:
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int arr[10000] = { 0 };int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}//去重for (i = 0; i < n; i++){//j是i后面的元素,让他们比较是否相等int j = 0;//j的初始位置在i的后面for (j = i+1; j < n; j++){//如果两个元素相等,进入循环处理if (arr[i] = arr[j]){//覆盖int k = 0;for (k = j; k < n-1; k++){arr[k] = arr[k + 1];}//删掉一个,少了一个元素n--;j--;}}}for (i = 0; i < n; i++){printf("%d", arr[i]);}return 0;
}
4.有序序列合并
解题思路:
我们先把输入的数据存放到同一个数组,再使用冒泡排序即可。
解题代码:
#include<stdio.h>
int main()
{int n = 0;int m = 0;int arr[2000] = { 0 };scanf("%d %d", &n, &m);int i = 0;for (i = 0; i < n; i++){scanf("%d", &arr[i]);}for (i = n; i < n+m; i++){scanf("%d", &arr[i]);}for (i = 0; i < n + m -1; i++){int j = 0;for (j = 0; j < n + m - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}for (i = 0; i < n + m; i++){printf("%d ", arr[i]);}return 0;
}
5.班级成绩输入输出
解题思路:
这里非常简单,只需要控制好循环输入即可。
解题代码:
#include<stdio.h>
int main()
{int i = 0;double arr[5] = { 0 };for(i=0;i<5;i++){ int j = 0;double sum = 0;for (j = 0; j < 5; j++){scanf("%lf", &arr[j]);sum += arr[j];}for (j = 0; j < 5; j++){printf("%.1lf ", arr[j]);}printf("%.1lf\n", sum);}return 0;
}
6.矩阵元素定位
解题思路:
这里我们要知道,二维数组的存储是如下图,kiki想看到的是第一行第二个的数字,也就是2,但是如果从二维数组里面拿出第一行第二个的数字的话,就是6,所以我们应当给行和列-1。
解题代码:
#include<stdio.h>
int main()
{int n = 0;int m = 0;scanf("%d %d", &n, &m);int i = 0;int arr[25][25] = { 0 };for (i = 0; i < n; i++){int j = 0;for (j = 0; j < m; j++){scanf("%d", &arr[i][j]);}}int R = 0;int T = 0;scanf("%d %d", &R,&T);printf("%d", arr[R-1][T-1]);return 0;
}