|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
定义函数RemoveSame(a,n),去掉有n个元素的有序整数序列a中的重复元素,返回去重后序列的长度。
输入:5 3 3 3 6 6
输出:
3 6
2
- #include <stdio.h>
- #include <stdlib.h>
- int RemoveSame(int a[], int n);
- int main(void)
- {
- int n, a[100], i;
- scanf("%d", &n);
- for (i = 0; i < n; ++i) scanf("%d", &a[i]);
- n = RemoveSame(a, n);
- for (i = 0; i < n - 1; ++i) printf("%d ", a[i]);
- /*只需要在此处控制输出空格*/
- printf("%d\n%d\n", a[n - 1], n);
- /*把最后一个数放在这里输出,是为了避免第一行最后多出一个空格*/
- }
- int RemoveSame(int a[], int n) //请给这个函数加足够详细的注释,谢谢
- {
- int key, cnt = 0, *ptr, *q;
- for (ptr = a; ptr < a + n; ++ptr) {
- for (key = 1, q = a; q < a + cnt; ++q)
- if (*ptr == *q) { key = 0; break; }
-
- if (key) a[cnt++] = *ptr;
- }
- return cnt;
- }
复制代码
- #include <stdio.h>
- #include <stdlib.h>
- int RemoveSame(int a[], int n);
- int main(void)
- {
- int n, a[100], i;
- scanf("%d", &n);
- for (i = 0; i < n; ++i)
- scanf("%d", &a[i]);
- n = RemoveSame(a, n);
- for (i = 0; i < n - 1; ++i)
- printf("%d ", a[i]);
- /*只需要在此处控制输出空格*/
- printf("%d\n%d\n", a[n - 1], n);
- /*把最后一个数放在这里输出,是为了避免第一行最后多出一个空格*/
- }
- int RemoveSame(int a[], int n) //请给这个函数加足够详细的注释,谢谢
- {
- int key, cnt = 0, *ptr, *q;
- for (ptr = a; ptr < a + n; ++ptr) // 将数组 a 的首地址赋给 ptr,a 的末地址赋给 ptr + n
- {
- for (key = 1, q = a; q < a + cnt; ++q) // 将数组 a 的首地址赋给 q
- {
- if (*ptr == *q) // 若 q 地址的元素值与 ptr 地址的元素值相同
- {
- key = 0; // 标志置 0,同时中断内循环
- break;
- }
- }
- if (key) // 若标志 key 不为 0,执行下一语句
- a[cnt++] = *ptr; // 将 ptr 地址的元素值赋给数组 cnt 单元(覆盖与某单元相同的元素值)
- }
- return cnt;
- }
复制代码
|
|