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;
else
flag2 = 1;
}
}
if (flag1+flag2 == 1)
printf("sorted\n");
else
printf("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;
}