一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
题目描述
写函数void search(int *num,int n,int *nmax,int *nmaxindex)实现在含n各元素的数组num中查找最大值及其第一次出现下标,分别通过指针nmax,nmaxindex返回。
写函数void input(int *num,int n),输入数组num的n个数。
主函数输入数据,调用input, search, 输出最大值及其第一次出现下标。
不可以在主函数中计算。
输入
测试次数t
每组测试数据一行: 数据个数n(n>1) n个整数
输出
每组测试数据输出一行:
数组最大值 数组最大值第一次出现下标(下标从0开始)
输入样例1
2
10 1 2 3 4 5 6 7 8 9 -10
20 9 10 20 40 50 999999 -99 999998 0 9 20 11 12 432 53 3421 6 42 43 34
输出样例1
9 8
999999 5
思路分析
知道指针的含义和*以及&的意思那两个函数应该不难。
关键在于主函数怎么写,毕竟涉及到指针,一不小心就会运行异常之类,就像很多时候自己的代码在本地编译器能跑,但交上去就各种毛病。
一种是指针变量不赋值很容易出事,像这道题三个都设定为指针变量,想要在那两个调用的函数去操作就很危险。
还要就是如果一开始将指针变量赋值为NULL的话,在调用的函数中直接去将数据装进指针所指向的内存单元肯定不行,因为地址是空地址。
AC代码
#include"iostream"
using namespace std;
void search(int *num,int n,int *nmax,int *nmaxindex)
{
*nmaxindex=0;
*nmax=num[0];
for(int i=0;i<n;i++)
if(num[i]>*nmax)
{
*nmaxindex=i;
*nmax=num[i];
}
}
void input(int *num,int n)
{
for(int i=0;i<n;i++)
cin>>num[i];
}
int main()
{
int t,n,*num=NULL,nmax,nmaxindex;
cin>>t;
while(t--)
{
cin>>n;
num=new int[n];
input(num,n);
search(num,n,&nmax,&nmaxindex);
cout<<nmax<<' '<<nmaxindex<<endl;
delete[] num;
}
}