博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言习题:有关数组的练习操作
阅读量:2431 次
发布时间:2019-05-10

本文共 3499 字,大约阅读时间需要 11 分钟。

1.1、 求两个有序数组的公共元素

#include 
int 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 、求三个有序数组的公共元素

#include 
int 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,求这个元素。

#include 
int 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/

你可能感兴趣的文章
MySQL存储引擎之MyISAM与InnoDB区别
查看>>
Python numpy小练习
查看>>
Linux命令英文解释(按英文字母顺序)
查看>>
秋招面试准备-数据库知识
查看>>
数据分析岗-机器学习相关知识
查看>>
分类模型的效果评估
查看>>
深入理解什么是Java双亲委派模型
查看>>
MySQL优化Limit查询语句
查看>>
轻松入门MySQL主从复制原理
查看>>
SpringCloud全家桶---Zuul网关
查看>>
基于zuul和ribbon的灰度发布方案
查看>>
JVM常用垃圾收集器参数说明
查看>>
MySQL索引基础知识梳理
查看>>
MySQL事务ACID底层实现原理
查看>>
关于MySQL wait_timeout问题记录
查看>>
基础算法面试题---如何用栈实现队列
查看>>
基础算法面试题---如何用队列实现栈(1)
查看>>
基础算法面试题---如何用队列实现栈(2)
查看>>
基础算法面试题---如何数组实现栈和队列
查看>>
API接口安全性设计以及各参数的作用
查看>>