• 如果代码存在问题,麻烦大家指正 ~ ~
  • 有帮助麻烦点个赞 ~ ~

    实验五-一维数组

    • 7-1 查找整数(分数 15)
    • 7-2 交换最小值和最大值(分数 15)
    • 7-3 简化的插入排序(分数 15)
    • 7-4 删除指定数据(分数 20)
    • 7-5 数组元素循环右移问题(分数 20)
    • 7-6 找出不是两个数组共有的元素(分数 20)

7-1 查找整数(分数 15)

作者 杨起帆
单位 浙大城市学院

本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”

输入格式:
输入在第一行中给出两个正整数N(≤20)和X,第二行给出N个整数。数字均不超过长整型,其间以空格分隔。

输出格式:
在一行中输出X的位置,或者“Not Found”

输入样例1:

5 73 5 7 1 9

输出样例1:

2

输入样例2:

5 73 5 8 1 9

输出样例2:

Not Found

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include int main(){int n, x, a, i, flag=0;scanf("%d %d", &n, &x);for(i=0; i<n; i++) {scanf("%d", &a);if(a==x){printf("%d", i);flag = 1;}}if(flag == 0)printf("Not Found");return 0;}

7-2 交换最小值和最大值(分数 15)

作者 C课程组
单位 浙江大学

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:

58 2 5 1 4

输出样例:

1 2 5 4 8 

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include int main(){int i, n, min, max, idx1=0, idx2=0, temp;int a[10];scanf("%d", &n);for(i=0; i<n; i++)scanf("%d", &a[i]);max=a[0]; min=a[0];for(i=1; i<n; i++) {if(min>a[i]) {min=a[i];idx1=i;} if(max<a[i]) {max=a[i];idx2=i;}}if(idx2==0)idx2=idx1;temp=a[0]; a[0]=a[idx1]; a[idx1]=temp; temp=a[n-1]; a[n-1]=a[idx2]; a[idx2]=temp; for(i=0; i<n; i++)printf("%d ", a[i]);return 0;}

7-3 简化的插入排序(分数 15)

作者 C课程组
单位 浙江大学

本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。

输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X

输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。

输入样例:

51 2 4 5 73

输出样例:

1 2 3 4 5 7 

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#includeint main(){int N, i, n, t;int a[80];scanf("%d", &N);for(i=0; i<N; i++)scanf("%d", &a[i]);scanf("%d", &n);if(n<a[0]) {for(t=N; t>0; t--)a[t]=a[t-1];a[0]=n;}else if(n>a[N-1]) a[N]=n;else for(i=0; i<N; i++)if(a[i]<n && a[i+1]>=n) {for(t=N; t>i; t--) a[t]=a[t-1];a[i+1]=n;}for(i=0; i<=N; i++)printf("%d ", a[i]);return 0;}

7-4 删除指定数据(分数 20)

作者 孙骏
单位 武汉理工大学

在一列数据中,删除指定的值。输出每次删除后的数列。若数列中无待删除数据,则输出原数列。

输入格式:
在第1行输入一个整数n(0<n<=1000),表示数据个数;
在第2行输入n个整数,以空格分隔;
在第3行输入整数m,表示需要删除的值。

输出格式:
每次删除后,输出删除后的数列,每个数据后有一个空格。
每行输出一次删除后结果。
若数列中无待删除数据,则输出原数列。

输入样例 1:

105 8 7 12 17 15 3 7 7 107

输出样例 1:

5 8 12 17 15 3 7 7 10 5 8 12 17 15 3 7 10 5 8 12 17 15 3 10 

输入样例 2:

105 8 7 12 17 15 3 7 7 106

输出样例 2:

5 8 7 12 17 15 3 7 7 10 

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#includeint main(){int n, x, i, j, c=0;int a[1001];scanf("%d", &n);for(i=0; i<n; i++)scanf("%d", &a[i]);scanf("%d", &x);for(i=0; i<n-c; i++)if(a[i]==x) {for(j=i;j<n;j++)a[j]=a[j+1];i--;c++;for(j=0; j<n-c; j++)printf("%d ", a[j]);printf("\n");}if(c==0)for(i=0; i<n; i++)printf("%d ", a[i]);return 0;}

7-5 数组元素循环右移问题(分数 20)

作者 DS课程组
单位 浙江大学

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1 ⋯ AN−1)变换为(AN−M ⋯ AN−1A0A1 ⋯ AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

6 21 2 3 4 5 6

输出样例:

5 6 1 2 3 4

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#includeint main(){int a[101];int i, m, n;scanf("%d %d", &m, &n);for(i=0; i<m; i++)scanf("%d", &a[i]);n %= m;for(i=0; i<m; i++) {if(i != 0) printf(" ");printf("%d", a[(m-n+i)%m]);}return 0; }

7-6 找出不是两个数组共有的元素(分数 20)

作者 张彤彧
单位 浙江大学

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 10011 6 4 8 2 6 -5 9 0 100 8 1

输出样例:

3 5 -15 6 4 1

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#includeint main(){int a1[50], a2[50], a3[50];int m, n, i, j, k = 0;scanf("%d", &m);for (i = 0; i < m; i++)scanf("%d", &a1[i]);scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d", &a2[i]);for (i = 0; i < m; i++) {for (j = 0; j < n && a2[j] != a1[i]; j++);if (j == n) a3[k++] = a1[i];}for (i = 0; i < n; i++) {for (j = 0; j < m && a1[j] != a2[i]; j++);if (j == m) a3[k++] = a2[i];}printf("%d", a3[0]);for(i = 1; i < k; i++) {for(j = 0; j < i && a3[i] != a3[j]; j++);if(j == i) printf(" %d", a3[i]);}return 0;}