#include#include #include using namespace std;//28/05/13 16:36//如果使用临时数组的话复杂度会减少很多。。。//搞了两个小时终于搞定了//关键在于//1、如何判定那个指针移动//2、数组b遇到最后一个元素时怎么办//3、数组a遇到最后一个元素怎么办//4、设定a的最大值比b的最大值大,就是为了是q指针先打到末尾,要不然很混乱 int main(int argc, char *argv[]){ //初始化数组 int a[]={ 1,2,3,4,8,9,13}; int b[]={ 2,2,6,7,12}; //计算数组长度 const int lena=sizeof(a)/sizeof(a[0]); const int lenb=sizeof(b)/sizeof(b[0]); //计算数组的最大值 const int maxa=a[lena-1]; const int maxb=b[lenb-1]; //pq指针分别指向数组的首元素 int *p=a; int *q=b; //设定计数器 ,使用静态值较好 static int count =0; // int k; cout<<"请输入第k大的k值:"; cin>>k; if(k<1||k>lena+lenb) { cout<<"输入数据不符合要求,请重新输入,亲!"< >k; } //只考虑 当a数组最大元素大于b数组最大元素时 ,另外一种情况类推 if(maxa>maxb) { //循环结束的条件 ,都已到达数组的结尾 while(p<=a+lena-1 && q<=b+lenb-1 ) { //a的元素小于b的元素时 if(*p<=*q) { //先计数器加一 ++count; //如果满足k值输出此时a数组中的元素,跳出整个循环,不满足时语句不执行 if(k==count) {cout<<"第"< <<"个数是="<<*p<