数组中的最大值以及最小值的位置变换的问题(C++)

将一个5×5的数组中的最大值放到数组的中心位置

分析:遍历数组,找到最大的元素,然后将该元素与中心位置的元素交换位置

#include<iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main( void)
{
	 void changeArrayData(int *arrayAddress1, int *arrayAddress2);//声明交换元素的函数·
	 int array[5][5] = {0};
	 int i = 0, j = 0;
	 int *arrayMax = 0;
	 /*给数组赋值*/
	 srand((unsigned long)time(0));//初始化rand函数
	 while(i <25){
		   *(*array + i++) = rand()%100;//100以内的随机数
	 }
	 i = 0;
	 arrayMax = array[0];
	 while(++i < 25)
	 {
		  if(*(*array + i) > *arrayMax)//找最大值
		   arrayMax = *array + i;
	 }
	 if(arrayMax != array[2] + 2)
	 {
		  changeArrayData(arrayMax, array[2] + 2);//交换最大值
	 }
	 /*输出数组*/
	 for(i = 0; i < 5; i++)
	 {
		  for(j = 0; j < 5; j++)
		  cout<<*(*(array+i)+j)<<"\t";
		  cout<<endl;
	 }
	 cout<<endl;
	 return 0;
}
/******************************************************
 函数功能:    交换两个整形地址单元的值
******************************************************/
void changeArrayData(int *arrayAddress1, int *arrayAddress2)
{
    int temp = 0;
    temp = *arrayAddress1;
    *arrayAddress1 = *arrayAddress2;
    *arrayAddress2 = temp;
}

运行界面:


代码分析:

使用rand函数对数组赋初值,然后通过“打擂台”的方法,遍历数组的所有元素,找到最大的元素。

然后把arrayMax获取最大元素的地址,将arrayMax和中间的元素(array[2][2])的地址传递给函数changeArrayData,进行位置的变换。

将一个5×5的数组中的最大值放到数组的中心位置,将最小值放到数组的第一个元素的位置。

#include<iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main( void)
{
	 void changeArrayData(int *arrayAddress1, int *arrayAddress2);
	 int array[5][5] = {0};
	 int i = 0, j = 0;
	 int *arrayMax =*(array +2)+2, *arrayMin=*(array);
	 /*给数组赋值*/
	 srand((unsigned long)time(0));
	 while(i <25){
		   *(*array + i++) = rand()%100;//100以内的随机数
	 }
	 i = 0;
	 while(++i < 25)
	 {
		  if(*(*array + i) > *arrayMax)//找最大值
		   arrayMax = *array + i;
		  if(*(*array + i) < *arrayMin)//找最小值
		   arrayMin = *array + i;
	 }
	 if(arrayMax != array[2] + 2)
	 {
		  changeArrayData(arrayMax, array[2] + 2);//交换最大值
	 }
	 if(arrayMin != array[0] )
	 {
		  changeArrayData(arrayMin, array[0]);//交换最小值
	 }
	 /*输出数组*/
	 for(i = 0; i < 5; i++)
	 {
		  for(j = 0; j < 5; j++)
		  cout<<*(*(array+i)+j)<<"\t";
		  cout<<endl;
	 }
	 cout<<endl;
	 return 0;
}
/******************************************************
 函数功能:    交换两个整形地址单元的值
******************************************************/
void changeArrayData(int *arrayAddress1, int *arrayAddress2)
{
	 int temp = 0;
	 temp = *arrayAddress1;
	 *arrayAddress1 = *arrayAddress2;
	 *arrayAddress2 = temp;
}

运行界面:



代码分析:
arrayMax用来获取数组中最大的元素的地址,然后通过changeArrayData函数和a[2][2]交换位置;
arrayMin用来获取数组中最小的元素的地址,然后通过changeArrayData函数和a[0][0]交换位置。


将一个5×5的数组中的最大值放到数组的中心位置,四个角分别放4个最小的元素。


#include<iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main( void)
{
	 void changeArrayData(int *arrayAddress1, int *arrayAddress2);
	 int Array[5][5] = {0};
	 int i = 0, j = 0;
	 int *arrayMax =*(Array +2)+2, *arrayMin[4]={Array[0],Array[0]+4,Array[4],Array[4]+4};
	 /*给数组赋值*/
	 srand((unsigned long)time(0));
	 while(i <25){
		   *(*Array + i++) = rand()%100;//100以内的随机数
	 }
	 i = 0;
	 while(++i < 25)
	 {
		  if(*(*Array + i) > *arrayMax)//找最大值
		   arrayMax = *Array + i;
		  if(*(*Array + i) < *arrayMin[0])//找最小值
		   arrayMin[0] = *Array + i;
	 }
	 if(arrayMax != Array[2] + 2)
	 {
		  changeArrayData(arrayMax, Array[2] + 2);//交换最大值
		  arrayMax=Array[2]+2;
	 }
	 if(arrayMin[0] != Array[0] )
	 {
		  changeArrayData(arrayMin[0], Array[0]);//交换最小值
		  arrayMin[0]=Array[0];
	 }
	 i=1;
     while(i++<25){
	 for(j=1;j<4;j++){
		             if(*(*Array + i)>*arrayMin[j-1]&&*(*Array + i)<*arrayMin[j])
		             changeArrayData(*Array+i,arrayMin[j]);//如果数组中的元素值,大于arrayMin[j-1],小于arrayMin[j],就将该元素与arrayMin指向的元素交换位置
			 }
	}

	 /*输出数组*/
	 for(i = 0; i < 5; i++)
	 {
		  for(j = 0; j < 5; j++)
		  cout<<*(*(Array+i)+j)<<"\t";
		  cout<<endl;
	 }
	 cout<<endl;
	 return 0;
}
/******************************************************
 函数功能:    交换两个整形地址单元的值
******************************************************/
void changeArrayData(int *arrayAddress1, int *arrayAddress2)
{
	 int temp = 0;
	 temp = *arrayAddress1;
	 *arrayAddress1 = *arrayAddress2;
	 *arrayAddress2 = temp;
}

运行界面:



代码分析:

将最大值放到中间的思路不变,然后将四个最小值的地址放到四个指针数组中。
通过遍历获取最小值的地址,并放置到arrayMin[0]中。

然后,再次遍历数组中的所有元素,和arrayMin数组中的元素相比较:

          i=1;
         while(i++<25){
	    for(j=1;j<4;j++){
		             if(*(*Array + i)>*arrayMin[j-1]&&*(*Array + i)<*arrayMin[j])
		             changeArrayData(*Array+i,arrayMin[j]);//如果数组中的元素值,大于arrayMin[j-1],小于arrayMin[j],就将该元素与arrayMin指向的元素交换位置
			   }
	}

变量数组中的元素,分别和arrayMin数组中的元素相比较,如果数组中的元素值,大于arrayMin[j-1],小于arrayMin[j],就将该元素与arrayMin指向的元素交换位置。

然后就可以实现最小的四个元素分别在四个角上。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值