算法题练习(关于数组)

算法题

一.1

#include <stdio.h>
int main(void)
{
	int a[8] = {3,7,6,9,2,5,8,4};
	int i;
	int last = a[7];
	for( i = 6; i >= 0; --i ) {
		a[i+1] = a[i];
	}	
	a[i+1] = last;
	
	for( i = 0; i < 8; ++i ) {
		printf("%d ", a[i]);
	}
	return 0;
} 

一.2

#include <stdio.h>
int RMax(int a[], int len);
void move(int *a, int len);
int main(void)
{
	int a[8] = {3, 7, 6, 9, 2, 5, 8, 4};
	int len = sizeof(a) / sizeof(a[0]);
	move(a, len);
	for( int i = 0; i < len; ++i ) {
		printf("%d ", a[i]);
	}
	return 0;
}
 
int RMax(int a[], int len) {
	int Rmax = 0;
	for( int i = 1; i < len; ++i ) {
		if( a[i] > a[Rmax] ) {
			Rmax = i;
		}
	}
	return Rmax;
} 
void move(int *a, int len) {
	int Rmax, last, i;
	Rmax = RMax(a, len);
	last = a[Rmax];
	for( i = Rmax - 1; i >= 0; --i ) {
		a[i+1] = a[i];
	}	
	a[i+1] = last;
}

一.2.1

#include <stdio.h>
int main(void)
{
	int a[8] = {3,7,6,9,2,5,8,4};
	int len = sizeof(a) / sizeof(a[0]);
	int temp, i, j;
	for( i = 0; i < 3; ++i ) {
		temp = a[0];
		for( j = 0; j < len - 1; ++j ) {
			a[j] = a[j+1];			
		}
		a[j] = temp;
	}
	
	for( int i = 0; i < len; ++i ) {
		printf("%d ", a[i]);
	}
	return 0;
 } 

二.1

#include <stdio.h>
int RMax(int a[], int len);
void swap(int a[], int len);
int main(void)
{
	int a[8] = {3,7,6,9,2,5,8,4};
	int len = sizeof(a) / sizeof(a[0]);
	swap(a, len);
	
	for( int 
	i = 0; i < 8; ++i ) {
		printf("%d ", a[i]);
	}
	return 0;
} 

int RMax(int a[], int len) {
	int Rmax = 0;
	for( int i = 1; i < len; ++i ) {
		if( a[i] > a[Rmax] ) {
			Rmax = i;
		}
	}
	return Rmax;
} 

void swap(int a[], int len){
	int Rmax, temp;
	Rmax = RMax(a, len);
	temp = a[Rmax];
	a[Rmax] = a[0];
	a[0] = temp;
} 

二.2

#include <stdio.h>
int RMin(int a[], int len);
void swap(int a[], int len);
int main(void)
{
	int a[8] = {3,7,6,9,2,5,8,4};
	int len = sizeof(a) / sizeof(a[0]);
	swap(a, len);
	
	for( int 
	i = 0; i < 8; ++i ) {
		printf("%d ", a[i]);
	}
	return 0;
} 

int RMin(int a[], int len) {
	int Rmin = 0;
	for( int i = 1; i < len; ++i ) {
		if( a[i] < a[Rmin] ) {
			Rmin = i;
		}
	}
	return Rmin;
} 

void swap(int a[], int len){
	int Rmin, temp;
	Rmin = RMin(a, len);
	temp = a[Rmin];
	a[Rmin] = a[len-1];
	a[len-1] = temp;
} 

二.3

#include <stdio.h>
int Max(int a[], int len);
int Count(int a[], int len, int key);
int main(void)
{
	int a[] = {3,7,6,9,5,7,9,1,3,4,1,9,5,1,9,1,8,2};
	int len = sizeof(a) / sizeof(a[0]);
	int max, count, i;
	max = Max(a, len);
	count = Count(a, len, max);
	printf("max = %d\ncount = %d",max, count);
	return 0;
} 

int Max(int a[], int len) {
	int max = a[0];
	for( int i = 1; i < len; i++ ) {
		if( a[i] > max ) {
			max = a[i];
		}
	}
	return max;
} 

int Count(int a[], int len, int key){
	int count = 0;
	for( int i = 0; i < len; i++ ) {
		if( a[i] == key ) {
			count++;
		}
	}
	return count;
}

二.4

#include <stdio.h>
int RMax(int a[], int len);/* 求下标 */
int SMax(int a[], int len, int max);

int main(void)
{
	int a[] = {3,7,6,9,2,5,8,4};
	int len = sizeof(a) / sizeof(a[0]);
	int Rmax, smax, i;
	Rmax = RMax(a, len);
	smax = SMax(a, len, Rmax);
	printf("数组中的最大值为:%d\n数组中的次大值为: %d",a[Rmax], smax);
	return 0;
} 

int RMax(int a[], int len) {
	int Rmax = 0;
	for( int i = 1; i < len; ++i ) {
		if( a[i] > a[Rmax] ) {
			Rmax = i;
		}
	}
	return Rmax;
} 

int SMax(int a[], int len, int Rmax) {
	int j = 0;
	if(Rmax == 0) j=Rmax+1;
	/* 避免直接选中max */	
	int smax = a[j];
	for( int i = 1; i < len; i++ ) {
		if( a[i] > smax && i != Rmax) {
			smax = a[i];
		}
	}
	return smax;
}
发布了157 篇原创文章 · 获赞 187 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45773503/article/details/105596915
今日推荐