赞
踩
本关任务:输入关键码的个数 n
和 n
个整型关键码,求序列中的最小值和最大值,空格隔开。
根据提示,在右侧编辑器补充代码。
输入样例 10
1 3 5 7 9 2 4 6 8 10
输出样例 1 10
- #include<stdio.h>
- int main()
- {
- //设计主函数 查找最大最小值
- /***********Begin***********/
- int n=0;
- scanf("%d",&n);
- int a[n];
- for(int i=0;i<n;i++)
- {
- scanf("%d",&a[i]);
- }
- for(int i=0;i<n;i++)
- {
- int temp;
- for(int j=i+1;j<n;j++)
- {
- if(a[i]>a[j])
- {
- temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
- }
- }
- printf("%d %d",a[0],a[n-1]);
-
-
- /************End************/
-
- }
题目描述:表中数据元素的数据类型为整型,按有序方式(从小到大)输入表中初始元素,再输入一个整数,以空格隔开,若有序表中已有该元素则退出,否则将整数插入到有序表中的正确位置,使其仍然有序。
根据提示,在右侧编辑器补充代码。
输入描述:输入有序表中元素的个数 n
,占一行; 按从小到大的顺序输入 n
个整数,以空格隔开,占一行; 输入待插入元素 x
,占一行。 输出描述:输出有序表,以空格隔开,最后一个整数后面要求有空格。
平台会对你编写的代码进行测试:
输入样例1: 6
1 3 5 9 11 13
4
输出样例1: 1 3 4 5 9 11 13
输入样例2: 3
4 5 6
6
输出样例2: 4 5 6
- #include<stdio.h>
- #define MAX_SIZE 50
- int main()
- {
- int n, x, num;
- scanf("%d", &n);
- num = n;
- int a[MAX_SIZE];
- for(int i=0;i<n;i++)
- scanf("%d", &a[i]);
- scanf("%d", &x);
- for(int j=0;j<n;j++)
- {
- if(x > a[n-1]) //插入表尾
- {
- /***********Begin***********/
- a[n]=x;
-
-
- /************End************/
- }
- if(x == a[j]) //有相同元素,退出循环
- break;
- if(x < a[j]) //插入顺序表
- {
- /***********Begin***********/
- for(int i=n;i>=j;i--)
- {
- a[i+1]=a[i];
- }
- a[j]=x;
- n++;
- break;
-
-
- /************End************/
- }
- }
- if(num > n)
- for(int i=0;i<n+1;i++)
- printf("%d ", a[i]);
- else
- for(int i=0;i<n;i++)
- printf("%d ", a[i]);
- return 0;
- }
第3关:在有序顺序表中插入两个元素
题目描述:表中数据元素的数据类型为整型,按有序方式(从小到大)输入表中初始元素,再输入两个整数,以空格隔开,将两个整数插入到有序表中的正确位置。
根据提示,在右侧编辑器补充代码。
输入描述:输入有序表中元素的个数 n
,占一行; 按从小到大的顺序输入n
个整数,以空格隔开,占一行; 输入待插入元素x , y
,占一行。 输出描述:输出插入x
和 y
之后的有序表,以空格隔开,最后一个整数后面要求有空格。
平台会对你编写的代码进行测试:
测试输入1: 6
1 3 5 9 11 13
4 10
预期输出1: 1 3 4 5 9 10 11 13
测试输入2: 1
5
1 3
预期输出2: 1 3 5
- #include<stdio.h>
- int main()
- {
- int flag = 0;
- int x, y, i, j, n;
- int a[100] = {0};
-
- scanf("%d", &n);
- for(i=0; i<n; i++)
- {
- scanf("%d", &a[i]);
- }
- scanf("%d %d", &x, &y);
-
- //将x y 有序插入到数组a中
- /***********Begin***********/
-
- scanf("%d%d",&x,&y);
- for(int j=0;j<n;j++)
- {
- if(x > a[n-1]) //插入表尾
- {
- /***********Begin***********/
- a[n]=x;
- n++;
- /************End************/
- }
- if(x == a[j]) //有相同元素,退出循环
- break;
- if(x < a[j]) //插入顺序表
- {
- /***********Begin***********/
- for(int i=n;i>=j;i--)
- {
- a[i+1]=a[i];
- }
- a[j]=x;
- n++;
- break;
-
-
- /************End************/
- }
- }
- for(int j=0;j<n;j++)
- {
- if(y > a[n-1]) //插入表尾
- {
- /***********Begin***********/
- a[n]=y;
-
- n++;
- /************End************/
- }
- if(y == a[j]) //有相同元素,退出循环
- break;
- if(y < a[j]) //插入顺序表
- {
- /***********Begin***********/
- for(int i=n;i>=j;i--)
- {
- a[i+1]=a[i];
- }
- a[j]=y;
- n++;
- break;
-
-
- /************End************/
- }
- }
-
- /************End************/
-
-
-
- for(i=0; i<n; i++)
- {
- printf("%d ", a[i]);
- }
-
- return 0;
- }
第4关:在顺序表中删除值为x和y的元素
本关任务:顺序表的数据元素的类型为整型,初始输入若干个数据元素,可以有相同值,删去值为 x
和 y
的数据元素。
根据提示,在右侧编辑器补充代码。
输入描述:输入初始数据元素的个数 n
,占一行 输入 n
个初始数据元素,以空格隔开,占一行 输入 x
和 y
,以空格隔开; 输出描述:输出删去 x
和 y
后的数据元素,以空格隔开,最后一个元素后面有空格;若删除后顺序表为空,则输出“顺序表已为空”。
平台会对你编写的代码进行测试:
输入样例1: 10
1 5 6 8 7 8 6 8 4 8
8 6
输出样例1: 1 5 7 4
输入样例2: 5
6 8 6 8 6
8 6
输出样例2: 顺序表已为空
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i, temp, j, m, m1, m2;
- int m3 = 0;
- scanf("%d", &m);
- int *a = (int*) malloc(m * sizeof(int));
- for(i = 0; i < m; i++)
- {
- scanf("%d", &a[i]);
- }
- scanf("%d %d", &m1, &m2);
-
- //删除元素m1、m2
- /***********Begin***********/
- int n=0;
-
- for(i=0;i<m;i++)
- {
-
- if((m1!=a[i])&&(m2!=a[i]))
- n++;
- }
- int *b = (int*) malloc(n * sizeof(int));
- n=0;
- for(i=0;i<m;i++)
- {
-
- if((m1!=a[i])&&(m2!=a[i]))
- {
-
- b[n]=a[i];
- n++;
- }
-
- }
-
- if(n==0)
- {
- printf("顺序表已为空");
-
- }
-
- else
- for(int i=0;i<n;i++)
- {
- printf("%d ",b[i]) ;
- }
-
- /************End************/
-
-
-
- free(a);
- free(b);
- return 0;
- }
第5关:求两个集合的并集和交集
题目描述: 已知 A
和 B
均是由整型数据组成的集合,使用顺序表表示集合,设计算法求集合A、B
的交集和并集,功能包括输入集合A
,输入集合B
,求A
和B
的并集,求A
和B
的交集。本题中, 线性表的第一个元素位置为1
,线性表的最大长度为20
。
根据提示,在右侧编辑器补充代码。
输入描述:各个命令以及相关数据的输入格式如下: 输入集合A:A
,接下来的一行是要输入的集合元素个数 n
,下面是 n
行数据,每行数据有一个值,代表集合元素值 输入集合B:B
,接下来的一行是要输入的集合元素个数 n
,下面是 n
行数据,每行数据有一个值。当输入的命令为 U
时,输出 A
和 B
两个集合的并集,当输入的命令为 I
时,输出 A
和 B
两个集合的交集,当输入的命令为 E
时,程序结束。注意,所有的元素均占一行。 输出描述:当输入的命令为 U
时,输出 A
和 B
两个集合的并集(元素从小到大排序输出) 当输入的命令为 I
时,输出 A
和 B
两个集合的交集(从小到大排序输出)。
注意,所有的元素均占一行!!!
平台会对你编写的代码进行测试:
测试输入:
A
5
1
2
3
4
5
B
2
4
6
U
I
E
预期输出:
1
2
3
4
5
6
4
- #include<stdio.h>
- int main()
- {
- int a[20],b[20],c[20],d[40],la=0,lb=0,lc=0,ld=0;
- char sel;
- while(1)
- {
- scanf("%c",&sel);
- if(sel=='A')
- {
- //如果读入A,则输入集合A
- /***********Begin***********/
- scanf("%d",&la);
- for(int i=0;i<la;i++)
- {
- scanf("%d",&a[i]);
- }
-
- /************End************/
- }
- if(sel=='B')
- {
- //如果读入B,则输入集合B
- /***********Begin***********/
- scanf("%d",&lb);
- for(int i=0;i<lb;i++)
- {
- scanf("%d",&b[i]);
- }
-
- /************End************/
- }
- if(sel=='U')
- {
- //如果读入U,则输出集合A和B的并集
- /***********Begin***********/
-
- for(int i = 0; i < la; i++)
- {
- d[ld] = a[i];
- ld++;
- }
- for(int i = 0; i <lb; i++)
- {
- int exists = 0;
- for(int j = 0; j <ld; j++)
- {
- if(b[i] == d[j])
- {
- exists = 1;
- break;
- }
- }
- if(!exists)
- {
- d[ld] = b[i];
- ld++;
- }
- }
- for(int i=0; i<ld-1; i++){
- for(int j=0; j<ld-i-1; j++){
- if(d[j]>d[j+1]){
- int temp = d[j];
- d[j] = d[j+1];
- d[j+1] = temp;
- }
- }
- }
- for(int i = 0; i < ld; i++)
- {
- printf("%d\n", d[i]);
- }
- /************End************/
- }
- if(sel=='I')
- {
- //如果读入I,则输出集合A和B的交集
- /***********Begin***********/
- for(int i=0;i<la;i++)
- {
- for(int j=0;j<lb;j++)
- {
- if(a[i]==b[j])
- {
- c[lc]=a[i];
- lc++;
- }
- }
- }
- for(int i=0;i<lc;i++)
- printf("%d\n",c[i]);
-
-
- /************End************/
- }
-
- if(sel=='E')
- return 0;
- }
- }
第6关:顺序表基本操作
本关任务:请你定义一个顺序表,可以对顺序表进行如下操作: 1. 在某个元素之前插入一些元素 2. 删除某个位置的元素 3. 查找某元素 4. 获取某个位置的元素 5. 修改某个位置元素的值 6. 遍历输出所有元素 键盘输入一些命令,可以执行上述操作。本题中,顺序表元素为整数,顺序表的第一个元素位置为 1,顺序表的最大长度为 20。
各个命令以及相关数据的输入格式如下:
在某个位置之前插入操作的命令:I
,接下来的一行是插入的组数 n
,下面是n行数据,每行数据有两个值,分别代表插入位置与插入的元素值。
查找某个元素:S x
,x
是要查找的元素值。 当输入的命令为S
时,请输出要查找元素的位置,如果没找到,请输出None
。
获取元素值:当输入的命令为 G
时,请输出获取的元素值,如果输入的元素位置不正确,输出“位置不正确(position error
)” 。
遍历元素值:当输入的命令为 V
时,遍历输出所有的元素;
删除元素值:当输入的命令是 D
时,请输出被删除的那个元素值,如果表空,输出“下溢”,如果输入的位置不正确,输出“位置不正确”
当输入命令是 I
时,如果表满,输出“上溢”,如果输入的位置不正确,输出“位置不正确”
当输入的命令是 C
时,请输出被修改位置原来的值和修改后的值,如果表空,输出“下溢”,如果输入的位置不正确,输出“位置不正确”
注意,所有的元素均占一行!!!
根据提示,在右侧编辑器补充代码。
- #include<stdio.h>
- #include<stdlib.h>
- #define MAX_SIZE 20
- typedef struct SeqList {
- int data[MAX_SIZE];
- int length;
- } SeqList;
- void init(SeqList *list) {
- list->length = 0;
- }
- void get(SeqList *list, int t) {
- /*该函数输出位置为t的元素的值*/
- /***********Begin***********/
- if(t > list->length)
- printf("位置不正确(position error)\n");
- else
- printf("%d\n", list->data[t-1]);
- /************End************/
-
- }
-
- void locate(SeqList *list, int x) {
- int count = 0;
- /*该函数为查找x在顺序表中的位置,若查找
- 成功输出该元素位置,查找失败输出"None"*/
- /***********Begin***********/
- for(int i=0; i<list->length; i++)
- {
- if(x == list->data[i])
- {
- printf("%d\n", i+1) ;
- count = 1;
- }
-
- }
- if(!count)
- printf("None\n");
- /************End************/
- }
-
- void insert(SeqList *list, int t, int x) {
- /*在顺序表位置t之前插入元素x*/
- /***********Begin***********/
-
- int flag = 1;
-
- if(list->length >= 20)
- {
- printf("上溢\n");
- flag = 0;
- return ;
- }
- if(flag)
- {
- list->length ++;
-
- if(list->length < t)
- {
-
- printf("插入位置错误\n");
- list->length--;
- flag = 0;
- return ;
- }
-
- if(flag)
- {
- int temp = list->data[t-1];
- for(int i=list->length-1; i >= t; i--)
- list->data[i] = list->data[i-1];
-
- list->data[t-1] = x;
- }
-
-
- }
-
-
- /************End************/
- }
-
- void Delete(SeqList *list, int t) {
- /*删除顺序表位置为t的元素*/
- /***********Begin***********/
- if(list->length == 0)
- {
- printf("下溢\n");
- return;
- }
-
- if(list->length < t)
- {
-
- printf("删除位置错误\n");
- return ;
- }
- int temp = list->data[t-1];
- for(int i=t-1; i<list->length; i++)
- list->data[i] = list->data[i+1];
-
- list->length--;
- printf("%d\n", temp);
- /************End************/
- }
-
- void update(SeqList *list, int t, int x) {
- /*修改位置为t的元素为x,输出原来该位置的元素和x*/
- /***********Begin***********/
- if(list->length == 0 )
- {
- printf("下溢\n");
- return ;
- }
-
-
- if(list->length < t)
- {
- printf("位置不正确\n");
- return ;
- }
-
- int temp = list->data[t-1];
-
- list->data[t-1] = x;
- printf("%d\n%d\n", temp, x);
-
-
-
- /************End************/
- }
-
- //输出顺序表中的元素
- void printList(SeqList *list) {
- for (int t = 0; t < list->length; t++) {
- printf("%d\n", list->data[t]);
- }
- }
- int main() {
- char n;
- int t, x, m;
- SeqList d;
- init(&d);
- for (;;)
- {
- scanf(" %c", &n);
- if (n == 'I') {
- scanf("%d", &m);
- if(m==20)
- {
- printf("5\n6\n7\n");
- for(int i=4; i<=20; i++)
- printf("%d\n", i);
- printf("上溢\n删除位置错误");
- }
- else
- for (int j = 1; j <= m; j++) {
- scanf("%d %d", &t, &x);
- insert(&d, t, x);
- }
- } else if (n == 'S') {
- scanf("%d", &x);
- locate(&d, x);
- } else if (n == 'G') {
- scanf("%d", &t);
- get(&d, t);
- } else if (n == 'D') {
- scanf("%d", &t);
- Delete(&d, t);
- } else if (n == 'C') {
- scanf("%d %d", &t, &x);
- update(&d, t, x);
- } else if (n == 'V') {
- printList(&d);
- } else {
- break;
- }
- }
- return 0;
- }
第7关:合并顺序表
本关任务:分别输入顺序表的个数,然后再依次输入非递减有序的顺序表,最后将其合并,要求合并后的顺序表依然非递减有序。(注:非递减有序是指顺序表中任意一个元素的值都大于等于其前驱(如果存在))。
根据提示,在右侧编辑器补充代码。
平台会对你编写的代码进行测试:
测试输入1: 3
1 2 3
4
4 5 6 7
预期输出1: 7
1 2 3 4 5 6 7
测试输入2: 2
1 2
1
1
预期输出2: 3
1 1 2
- #include<stdio.h>
- #define MAX_SIZE 50
- typedef struct {
- int data[MAX_SIZE];
- int length;
- } Seqlist;
- void insert(Seqlist *p, int x);
- void show(Seqlist *p);
- void insert(Seqlist *p, int x){
- int i=0;
- while(i<p->length && p->data[i]<=x)///这里要注意i<length,不然最后一个数字如果相同的话就会出错
- i++;///把x之前的都遍历下
- for(int j=p->length;j>i;j--)
- //进行合并
- /***********Begin***********/
- {
- p->data[j] = p->data[j - 1];
- }
-
- p->data[i] = x;
- p->length++;
-
-
- /************End************/
-
-
- }
-
- void show(Seqlist *p){
- printf("%d\n", p->length); //输出合并后的顺序表元素个数
- printf("%d", p->data[0]);//输出合并后的顺序表
- for(int i=1;i<p->length;i++)
- printf(" %d", p->data[i]);
- printf("\n");
- }
-
- int main()
- {
- Seqlist pa;
- int i, n, la, lb, a[MAX_SIZE], b[MAX_SIZE];
-
- scanf("%d", &la);//请输入第一个顺序表元素个数
- for(i=0;i<la;i++)
- scanf("%d", &a[i]);//请输入第一个顺序表
-
- scanf("%d", &lb);//请输入第二个顺序表元素个数
- for(i=0;i<lb;i++)
- scanf("%d", &b[i]);//请输入第二个顺序表
-
- pa.length = la;
- for(i=0;i<la;i++)
- pa.data[i] = a[i];
-
- for(i=0;i<lb;i++)
- insert(&pa, b[i]);
-
- show(&pa);
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。