本期是三道关于序列的题,一些笔者一开始忽略的小细节
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[50]={0};
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int i=0,j=0;
while(a[i]<=a[i+1])
{i++;}
while(a[j]>=a[j+1]&&a[j+1])//这里需要注意a[j+1]为0的情况
{j++;}
if(i==n-1||j==n-1)
printf("sorted");
else
printf("unsorted");
return 0;
}
下面是另外一种方法
int main()
{
int n = 0;
int arr[50] = {0};
scanf("%d", &n);
int i = 0;
int flag1 = 0;
int flag2 = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
if(i>0)
{
if(arr[i]>arr[i-1])
flag1 = 1;
else if(arr[i]<arr[i-1])
flag2 = 1;
}
}
//flag1 和 flag2 都为1是乱序的
if(flag1+flag2 > 1)
printf("unsorted\n");
else
printf("sorted\n");
return 0;}
#include<stdio.h>
int main()
{
int a[100]={0};
int n,m,z=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(int i=0;i<n-z;i++)
{
if(m==a[i])
{
for(int j=i;j<n-z;j++)
{
a[j]=a[j+1];
}
z++;
i--;//这里将a[i+1]前移后再一次判断,笔者一开始没有考虑,一个易错点
}
}
for(int i=0;i<n-z;i++)
{
printf("%d ",a[i]);
}
return 0;
}
下面是另外一种方法
int main()
{
int n = 0;
int arr[50] = {0};
int del = 0;
scanf("%d", &n);
int i = 0;
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &del);//要删除的元素
int j = 0;
for(i=0; i<n; i++)
{
if(arr[i] != del)
{
arr[j++] = arr[i];
}
}
for(i=0; i<j; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
#include<stdio.h>
int main()
{
int a[100] = { 0 };
int b[100] = { 0 };
int n, m, i = 0, j = 0, z = 0;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for (j = 0; j < m; j++)
{
scanf("%d", &b[j]);
}
i = 0, j = 0;
int c[200] = { 0 };
while (z < m + n)
{
if (a[i] && b[j])//这里时二者都不为0的情况
{
if (a[i] < b[j])
{
c[z] = a[i];
i++;
}
else {
c[z] = b[j];
j++;
}
z++;
}
else if (a[i]==0&&b[j])//这里是其中一个为0
{
c[z] = b[j];
j++; +z++;
}
else if (b[j] == 0 && a[i])//另外一个为0
{
c[z] = a[i];
i++; z++;
}
}
z = 0;
while (c[z])
{
printf("%d ", c[z]);
z++;
}
return 0;
}
一道题的解法很多,大家如果有更好的建议可以给笔者留言哦!