本文共 3499 字,大约阅读时间需要 11 分钟。
1.1、 求两个有序数组的公共元素
#includeint main() { int a[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; int b[] = { 2, 4, 6, 8, 10 }; int i = 0, j = 0; while (i < sizeof(a) / 4 && j < sizeof(b) / 4) { if (a[i] < b[j]) { i++; } else if (a[i] == b[j]) { printf("%d ", a[i]); i++; j++; } else { j++; } } return 0;}
1.2 、求三个有序数组的公共元素
#includeint main() { int a[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; int b[] = { 2, 4, 6, 8, 10 }; int c[] = { 2, 4 }; int i = 0, j = 0, k = 0; //for (i = 0; i < sizeof(a) / 4; i++) { // for (j = 0; j < sizeof(b) / 4; j++) { // for (k = 0; k < sizeof(c) / 4; k++) { // if (a[i] == b[j] && a[i] == c[k]) // printf("%d ", a[i]); // } // } //} while (i < sizeof(a) / 4 && j < sizeof(b) / 4 && k < sizeof(c) / 4) { if (a[i] < b[j] && a[i] < c[k]) { i++; } if (b[j] < a[i] && b[j] < c[k]) { j++; } if (c[k] < b[j] && c[k] < a[i]) { k++; } else if (a[i] == b[j] && a[i] == c[k]) { printf("%d ", a[i]); i++; j++; k++; } } return 0;}
1.3、求n个有序数组的公共元素
2、求数组的最大值和次大值
#include#define NUM 5int main() { int i = 0; int j = 0; int temp = 0; int max = 0; int next_max; int a[NUM] = { 2,9,3,4,6 }; for (int i = 0; i < NUM - 1; i++) { for (int j = 0; j < NUM - 1 - i; j++) { if (a[j] < a[j + 1]) { temp = a[j + 1]; a[j + 1] = a[j]; a[j] = temp; } } } max = a[0]; next_max = a[1]; printf("%d %d", max, next_max); return 0;}
3、 给定一个n个整型元素的数组a,其中有一个元素出现次数超过n / 2,求这个元素。
#includeint main(){ int arr[] = { 1,2,3,2,2 }; int tmp = arr[0]; int cnt = 1;//tmp出现的次数-非tmp出现的次数 for (int i = 1; i < sizeof(arr) / sizeof(int); ++i) { if (tmp == arr[i]) { ++cnt; } else { --cnt; if (cnt <= 0) { tmp = arr[i]; cnt = 1; } } } printf("cnt = %d\n", cnt);}
#include#define N 10int find_1(int* a, int n) { int curValue = a[0]; int count = 1; for (int i = 1; i < n; ++i) { if (a[i] == curValue) count++; else { count--; if (count < 0) { curValue = a[i]; count = 1; } } } return curValue;}int find_2(int* a, int n) { int temp = 0; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (a[j] < a[j + 1]) { temp = a[j + 1]; a[j + 1] = a[j]; a[j] = temp; } } } return a[n / 2];}int main() { int a[N] = { 3,9,9,9,9,9,2,3,9,2 }; int i = 0; //int ret = find_1(a, N); int ret = find_2(a, N); printf("%d\n", ret); system("pause"); return 0;}
4、给定一个含有n个元素的整型数组,找出数组中的两个元素x和y使得abs(x - y)值最小
/qsort()函数原型//void qsort(void* base,size_t nmemb,size_t size,int (*compare)(const void*, const void*));#include#include //qsort()头文件#include //INT_MAX头文件#define N 5int compare(const void* a, const void* b) { //先将变量a和b强制类型转换为int型指针,然后引用其中的值进行减法运算再将结果返回 return *(int*)a - *(int*)b;}//对元素进行升序排列,则定义comp所指向的函数为:如果其第一个参数比第二个参数小,则返回一个小于0的值,反之则返回一个大于0的值,如果相等,则返回0。int find_abs_min(int* a, int n) { int i, j, k, min_value; qsort(a, n, sizeof(int), compare); min_value = INT_MAX; j = k = 0; for (i = 0; i < n - 1; i++) { if (a[i + 1] - a[i] < min_value) { min_value = a[i + 1] - a[i]; j = a[i + 1]; k = a[i]; } } printf("min_value: %d, %d - %d\n", min_value, j, k); return 0;}int main() { int array[N] = { 2,5,6,16,23 }; find_abs_min(array, N); return 0;}
5、 给定含有1001个元素的数组,其中存放了1-1000之内的整数,只有一个整数是重复的,请找出这个数
提示:A1 + … + A1001 – (1 + …+ 1000)转载地址:http://wxxmb.baihongyu.com/