1.有序序列合并
描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
输入描述:
输入包含三行,
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入:
5 6
1 3 7 9 22
2 8 10 17 33 44
输出:
1 2 3 7 8 9 10 17 22 33 44
思路:将两个数组中的数据存在另一个数组中,然后利用冒泡排序法进行排序。
#include <stdio.h> int main() { int m, n,i,j,temp; scanf("%d %d", &m, &n); int a[m], b[n]; int x[m+n]; for(i=0;i<m;i++) { scanf("%d",&a[i]); } for(i=0;i<n;i++) { scanf("%d",&b[i]); } for(i=0;i<m;i++) { x[i]=a[i]; } j=0; for(i=m;i<m+n;i++) { x[i]=b[j]; j++; } for(i=0;i<n+m-1;i++) { for(j=0;j<m+n-1-i;j++) { if(x[j]>x[j+1]) { temp=x[j]; x[j]=x[j+1]; x[j+1]=temp; } } } for(i=0;i<m+n;i++) { printf("%d ",x[i]); } return 0; }
2.有序序列判断
描述
输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。
输入描述:
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。
输出描述:
输出为一行,如果序列有序输出sorted,否则输出unsorted。
示例1
输入:
5
1 6 9 22 30
输出:
sorted
示例2
输入:
5
3 4 7 2 10
输出:
unsorted
示例3
输入:
5
1 1 1 1 1
输出:
sorted
思路:将前一个数和后一个数做差,根据大于0或小于0的情况进行计数,如果计数的情况为n-1,那么就说明此序列两两相减的趋势相同,所以可对其进行是否有序的判断。
#include <stdio.h> int main() { int i,n,count1=0,count2=0; scanf("%d",&n); int x[n]; for(i=0;i<n;i++) { scanf("%d",&x[i]); } for(i=0;i<n-1;i++) { if(x[i]-x[i+1]>=0) count1++; else if(x[i]-x[i+1]<0) count2++; } if(count1==n-1||count2==n-1) printf("sorted"); else printf("unsorted"); return 0; }
3.有序序列插入一个整数
描述
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
输入描述:
第一行输入一个整数N(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。
输出描述:
输出为一行,N+1个有序排列的整数。
示例1
输入:
5
1 6 9 22 30
8
输出:
1 6 8 9 22 30
#include <stdio.h> int main() { int i,n,m; //n数组元素数目 m插入的数字 scanf("%d",&n); int x[n+1]; for(i=0;i<n;i++) { scanf("%d ",&x[i]); } int flag=1; //判断是否插入条件 scanf("%d",&m); for(i=0;i<n;i++) { if(m<x[i]&&flag==1) { printf("%d ",m) //完成插入 flag=0; //flag=0破坏if满足的条件,不再插入m } //m比数组中的某一个数小,则执行这个if语句 printf("%d ",x[i]); } if(m>x[n-1]) printf("%d ",m); //m比数组中的任一个数都打,则执行这个if语句 return 0; }
4.序列中删除指定数字
描述
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个整数,输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出描述:
输出为一行,删除指定数字之后的序列。
示例1
输入:
6
1 2 3 4 5 9
4
输出:
1 2 3 5 9
示例2
输入:
5
1 2 3 4 6 5
输出:
1 2 3 4 6
#include <stdio.h> int main() { int i,n; scanf("%d",&n); int x[n]; for(i=0;i<n;i++) { scanf("%d",&x[i]); } int m; scanf("%d",&m); for(i=0;i<n;i++) { if(x[i]!=m) //数组中的元素跟想要删除的数字相等就不打印 printf("%d ",x[i]); } return 0; }