- 如果代碼存在問題,麻煩大家指正 ~ ~
- 有幫助麻煩點個贊 ~ ~
實驗五-一維數組
- 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 7
3 5 7 1 9
輸出樣例1:
2
輸入樣例2:
5 7
3 5 8 1 9
輸出樣例2:
Not Found
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
參考代碼
#include <stdio.h>
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
個整數,數字間以空格分隔。
輸出格式:
在一行中順序輸出交換后的序列,每個整數后跟一個空格。
輸入樣例:
5
8 2 5 1 4
輸出樣例:
1 2 5 4 8
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
參考代碼
#include <stdio.h>
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
插入后仍然從小到大有序的整數序列,每個數字后面有一個空格。
輸入樣例:
5
1 2 4 5 7
3
輸出樣例:
1 2 3 4 5 7
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
參考代碼
#include<stdio.h>
int 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:
10
5 8 7 12 17 15 3 7 7 10
7
輸出樣例 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:
10
5 8 7 12 17 15 3 7 7 10
6
輸出樣例 2:
5 8 7 12 17 15 3 7 7 10
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
參考代碼
#include<stdio.h>
int 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 2
1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
參考代碼
#include<stdio.h>
int 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 100
11 6 4 8 2 6 -5 9 0 100 8 1
輸出樣例:
3 5 -15 6 4 1
代碼長度限制
16 KB
時間限制
400 ms
內存限制
64 MB
參考代碼
#include<stdio.h>
int 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;
}