题目描述
输入 10 个整数,将他们从小到大排序后输出,并给出每个元素在原来序列中的位置.
将程序需要的代码补全,只提交 begin
到 end
部分的代码。
#include <stdio.h>
#define N 10int main()
{int a[N], b[N], cnt = 1, i, j, tmp;int *p, *p1;for (p = a, p1 = b; p < a + N; p++) {scanf("%d", p);*(p1++) = cnt++;}for (i = 0; i < N; i++) {for (j = i + 1; j < N; j++) {if (*(a + i) > *(a + j)) {tmp = *(a + i);/******** begin *********/// Add code here/********** end *********/*(b + j) = tmp;}}}for (p = a; p < a + 9; p++) {printf("%d ", *p);}printf("%d\n", *p);for (p = b; p < b + 9; p++) {printf("%d ", *p);}printf("%d\n", *p);return 0;
}
输入
输入数据有一行,包含 10个整数,用空格分开。
1 2 3 5 4 6 8 9 10 7
输出
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9
代码如下:
*(a + i)=*(a + j);*(a+j)=tmp;//交换数值tmp=*(b+i);*(b+i)=*(b+j);
完整代码:
#include <stdio.h>
#define N 10int main()
{int a[N], b[N], cnt = 1, i, j, tmp;int *p, *p1;for (p = a, p1 = b; p < a + N; p++) {scanf("%d", p);*(p1++) = cnt++;}for (i = 0; i < N; i++) {for (j = i + 1; j < N; j++) {if (*(a + i) > *(a + j)) {tmp = *(a + i);*(a + i)=*(a + j);*(a+j)=tmp;//交换数值tmp=*(b+i);*(b+i)=*(b+j);*(b + j) = tmp;}}}for (p = a; p < a + 9; p++) {printf("%d ", *p);}printf("%d\n", *p);for (p = b; p < b + 9; p++) {printf("%d ", *p);}printf("%d\n", *p);return 0;
}